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
。
答
“解决方案”是在机器上以管理员身份运行我们的付款附加组件。 由于代码的其余部分无需管理员权限就可以运行,因此并不理想,但我还没有发现任何其他解决方案。
环境问题。棘手的调试,因为我不能重现。寻找差异。 Windows版本/权限/根证书/等。 –