Ich hatte ein paar XML
Dokumente, jeder hat etwa 50 bis 100 einzelne Blöcke/Tags, die einzeln mit SHA256 verpfändet und an einen Webdienst gesendet werden mussten, also habe ich eine Schleife durch die Dokumente und durch die Knoten gemacht, habe alles mit c#
Code unten eingetragen.Das Zertifikat wurde beim Signieren von XML aus Smartcard/Token gelöscht. Wie ist das möglich?
Alles lief gut, als ich es mit einer Smartcard prüfte, bekam sogar die "OK
" Antwort vom Server während 3 oder 4 Mal, bis plötzlich mein privater Schlüssel null wurde, dann bekam ich die verbotene anonyme Login-Nachricht von WS
, ich wusste nicht, dass ich ein anderes Zertifikat genommen habe, dieses Mal ein USB Token, und dasselbe ist passiert, gut für 3, 4 Mal und dann wieder weg! Ich weiß wirklich nicht was los ist oder was schiefgelaufen ist! Hat jemand Ahnung? Vielen Dank.
PS: Bevor es funktioniert nicht die signer.ComputeSignature();
Methode für Passwort wurde gefragt, jetzt die Ausnahme seiner auf:
var key = (RSACryptoServiceProvider)pCertificado.PrivateKey;
key.PersistKeyInCsp = false;
public string SignSHA256(string pDocument, string id, X509Certificate2 pCertificado)
{
string signatureCn14Transform = @"http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
string signatureMethod = @"http://www.w3.org/2000/09/xmldsig-more#rsa-sha256";
string digestMethod = @"http://www.w3.org/2001/04/xmlenc#sha256";
string signatureReferenceURI = "#" + id;
CryptoConfig.AddAlgorithm(typeof(RSAPKCS1SHA256SignatureDescription), signatureMethod);
XmlDocument xmlDocToSign = new XmlDocument();
xmlDocToSign.LoadXml(pDocument);
SignedXml signer = new SignedXml(xmlDocToSign);
var key = (RSACryptoServiceProvider)pCertificado.PrivateKey;
key.PersistKeyInCsp = false;
signer.SigningKey = key;
signer.SignedInfo.SignatureMethod = signatureMethod;
Reference reference = new Reference();
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
XmlDsigExcC14NTransform cn14Transform = new XmlDsigExcC14NTransform();
cn14Transform.Algorithm = signatureCn14Transform;
reference.AddTransform(cn14Transform);
reference.Uri = signatureReferenceURI;
reference.DigestMethod = digestMethod;
signer.AddReference(reference);
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoX509Data(pCertificado));
signer.KeyInfo = keyInfo;
signer.ComputeSignature();
xmlDocToSign.DocumentElement.AppendChild(signer.GetXml());
return xmlDocToSign.OuterXml;
}
Ich habe auch die Cert-Manager safeNet (Token) und safeSign Standart (Smartcard) überprüft und es gibt keinen privaten Schlüssel oder Zertifikat auf beiden. – Marisco
weiß nicht, was sonst zu tun, RCA-Funktion wurde von Server korrekt, so dass ich das Problem verursacht, ich habe geändert, um http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 und fügen Sie die Signatur ein, die http://www.w3.org/2000/09/xmldsig#enveloped-signature umhüllte, wie sie mir gesagt haben, das Gleiche passiert. Pls irgendeine Idee? – Marisco