Jedes Mal, wenn ich versuche, eine signierte XML zu senden, weist der Webdienst-Prüfer sie zurück.Signieren eines xml-Dokuments mit x509-Zertifikat
das Dokument unterzeichnen ich diesen Beispielcode nur angepasst von Microsoft:
http://msdn.microsoft.com/es-es/library/ms229745(v=vs.110).aspx
Meine Implementierung:
public static XmlDocument FirmarXML(XmlDocument xmlDoc)
{
try
{
X509Certificate2 myCert = null;
var store = new X509Store(StoreLocation.CurrentUser); //StoreLocation.LocalMachine fails too
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates;
foreach (var certificate in certificates)
{
if (certificate.Subject.Contains("xxx"))
{
myCert = certificate;
break;
}
}
if (myCert != null)
{
RSA rsaKey = ((RSA)myCert.PrivateKey);
// Sign the XML document.
SignXml(xmlDoc, rsaKey);
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
return xmlDoc;
}
// Sign an XML file.
// This document cannot be verified unless the verifying
// code has the key with which it was signed.
public static void SignXml(XmlDocument xmlDoc, RSA Key)
{
// Check arguments.
if (xmlDoc == null)
throw new ArgumentException("xmlDoc");
if (Key == null)
throw new ArgumentException("Key");
// Create a SignedXml object.
SignedXml signedXml = new SignedXml(xmlDoc);
// Add the key to the SignedXml document.
signedXml.SigningKey = Key;
// Create a reference to be signed.
Reference reference = new Reference();
reference.Uri = "";
// Add an enveloped transformation to the reference.
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
// Add the reference to the SignedXml object.
signedXml.AddReference(reference);
// Compute the signature.
signedXml.ComputeSignature();
// Get the XML representation of the signature and save
// it to an XmlElement object.
XmlElement xmlDigitalSignature = signedXml.GetXml();
// Append the element to the XML document.
xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
}
Ich denke, dass ich die gleichen Schritte bin nach meinem eigenen Zertifikat, aber es funktioniert nicht wie erwartet.
Jeder Vorschlag ist willkommen.
Hallo Wiktor, dein Blog war sehr interessant und ich habe die Beispiele, die du zeigst, getestet. Leider habe ich immer noch das gleiche Problem, die Unterschrift wird abgelehnt. Ich werde mehr Informationen unten posten. –