CryptographicException“签名密钥未加载”

问题描述:

我有尝试使用X509Certificate2证书签署XML文档的一些代码:CryptographicException“签名密钥未加载”

 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(); 
     ... 

这在8个不同的客户机和我自己的机器上的代码的工作,但我们有1个客户是得到错误:

​​3210

我已经得到了从客户证书和密码的副本,它在我的开发机器上正确签署没有任何错误。

有没有人有更深入的了解,为什么这可能会失败?证书和密码都是正确的,并且仅在客户服务器上失败。 我们使用.NET 4.5

+0

环境问题。棘手的调试,因为我不能重现。寻找差异。 Windows版本/权限/根证书/等。 –

“解决方案”是在机器上以管理员身份运行我们的付款附加组件。 由于代码的其余部分无需管理员权限就可以运行,因此并不理想,但我还没有发现任何其他解决方案。