2016-06-02 8 views
0

Ich versuche, ein XML-Dokument mit einem Verweis auf den KeyInfo-Knoten zu signieren, aber ich erhalte die Ausnahme "ungültiges Referenzelement" nach dem Aufruf der Methode "ComputeSignature".Ausnahmefehler beim Signieren einer XML-Datei

Dies ist mein Code:

 signedXml.SigningKey = certificate.PrivateKey; 

     if (!signParameters.IncludeCertificateInSignature) return; 
     var certificateKeyInfo = new KeyInfo(); 
     certificateKeyInfo.AddClause(new KeyInfoX509Data(certificate)); 
     signedXml.KeyInfo = certificateKeyInfo; 
     signedXml.KeyInfo.Id = "xmldsig-keyinfo"; 

     signedXml.AddReference(new Reference("#xmldsig-keyinfo")); 

Wenn ich den „# xmldsig-keyinfo“ zu entfernen, es funktioniert, aber ich habe die Referenz mit dem gesamten Dokument, ich brauche die Referenz mit dem KeyInfo-Tag.

Antwort

1

Ich fand schließlich die Antwort, ich kann die KeyInfoId-Referenz nicht hinzufügen, da das XML -Element noch nicht im XMLDoc erstellt wurde; also habe ich die SigneXML-Klasse implementiert und gebe das XML direkt von der keyInfo zurück.

public override XmlElement GetIdElement(XmlDocument doc, string id) 
{ 
    if (String.Compare(id, this.KeyInfo.Id, StringComparison.OrdinalIgnoreCase) == 0) 
     return this.KeyInfo.GetXml(); 
    else 
     return base.GetIdElement(doc, id); 
} 

Ich hoffe es hilft !!

Verwandte Themen