2017-08-07 4 views
0

j'ai un code qui tente de signer un document XML à l'aide d'un X509Certificate2 cert:CryptographicException « clé de signature est pas chargé »

 byte[] bytes = Convert.FromBase64String(_loginDetails.CertificateAsString); 

     X509Certificate2 cert = new X509Certificate2(bytes, _loginDetails.CertKey, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); 
     Reference reference = new Reference("#MsgBody"); 

     XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); 
     reference.AddTransform(env); 

     SignedXml signedXml = new SignedXml(doc); 
     signedXml.AddReference(reference); 
     RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)cert.PrivateKey; 
     signedXml.SigningKey = rsaKey; 
     signedXml.ComputeSignature(); 

     // Get the XML representation of the signature and add to the SOAP Header 
     XmlElement xmlDigitalSignature = signedXml.GetXml(); 
     ... 

Ce travail de code sur 8 machines des clients différents et sur ma propre machine, mais nous ont 1 client qui se l'erreur:

Signing key is not loaded at System.Security.Cryptography.Xml.SignedXml.ComputeSignature

J'ai obtenu une copie du certificat et mot de passe du client et il signe correctement sur ma machine de développeur sans aucune erreur.

Quelqu'un a-t-il plus d'informations sur les raisons pour lesquelles cela peut échouer? Le certificat et le mot de passe sont corrects et échouent uniquement sur le serveur du client. Nous utilisons .NET 4.5.

+0

Problème d'environnement. Tricky à déboguer comme je ne peux pas reproduire. Cherchez des différences. Version Windows/permissions/certificats racine/etc. –

Répondre

0

La "solution" consistait à exécuter notre module de paiement en tant qu'administrateur sur la machine. Pas idéal car le reste du code est construit pour fonctionner sans droits d'administrateur mais je n'ai trouvé aucune autre solution pour ce problème.