la signature d'un document xml avec certificat x509
Chaque fois que j'essaie d'envoyer un signé XML, web service vérificateur de la rejette.
À signer le document que j'ai juste adapté cet exemple de code fourni par Microsoft:
http://msdn.microsoft.com/es-es/library/ms229745(v=vs. 110).aspx
Ma mise en œuvre:
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));
}
Je pense que je suis en suivant les mêmes étapes à l'aide de mon propre certificat, toutefois, il ne fonctionne pas comme prévu.
Toute suggestion sera la bienvenue.
OriginalL'auteur Michael Knight | 2014-04-30
Vous devez vous connecter pour publier un commentaire.
Comment le serveur savoir ce certificat, le document est signé avec? Vous semblez ne pas comprendre le cert dans le document signé:
Si vous avez besoin de plus de détails, consultez mon entrée de blog
http://www.wiktorzychla.com/2012/12/interoperable-xml-digital-signatures-c_20.html
Je me demandais, est-ce le moyen de ne pas exposer la clé privée de la charge ou de la clé privée sont cryptés en quelque sorte dans la charge utile?
il n'y a pas de clé privée inclus de cette façon, seule la clé publique (certificat).
OriginalL'auteur Wiktor Zychla
J'ai déjà fait quelques changements à la suite de la Wiktor des échantillons. Toutefois, la signature encore rejetée par le service web.
La méthode que j'utilise pour signer aujourd'hui est: est-ce
Et la signature apparaît comme dans le document:
Quand un bon document est envoyé au serveur, il renvoie cette signature que j'ai utilisé comme un crépitement d'identifier les champs nécessaires:
Il me semble droit. Cependant toujours pas de travail. Quelqu'un a la moindre idée?
J'ai réalisé que c'est de ma faute. Je n'ai pas mis en œuvre avant votre méthode pour vérifier la signature. Maintenant, je l'ai fait et je reçois toujours "false". Ensuite, l'erreur est de mon côté. Je me retrouve assez confus car j'ai suivi les étapes sur votre blog, et a également ajouté un couple de plus à accomplir avec le même format que le serveur retourne lorsque le document est accepté. C'est mon fichier signé: tinyurl.com/lb5o6m9 Comment puis-je faire pour trouver la bonne valeur? Merci à l'avance.
pouvez-vous m'envoyer un email avec les détails de votre œuvre? Je vois le web de service comme le coupable, mais j'ai besoin à la fois de serveur et le code client pour essayer de vous aider. J'ai aussi envoyer des documents signés via http, et je n'ai pas de questions.
Assurez-vous, dites-moi juste votre adresse e-mail et je vous envoie un projet de tests.
Google est mon université page, mon e-mail est disponible publiquement.
OriginalL'auteur Michael Knight