我有一些代码试图使用X509Certificate2证书对XML文档进行签名:
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位客户得到了错误:
签名密钥未在System.Security.Cryptography.Xml.SignedXml.ComputeSignature加载
我从客户那里得到了一份证书和密码的副本,它在我的开发人员机器上正确地签名,没有任何错误。
有没有人能更深入地了解为什么这会失败呢?证书和密码都是正确的,只有在客户服务器上才会失败。我们正在使用.NET 4.5。
发布于 2017-08-19 16:01:40
“解决办法”是以管理员的身份在机器上运行我们的付款附加程序。不理想,因为代码的其余部分是在没有管理员权限的情况下运行的,但我没有找到任何其他解决方案来解决这个问题。
发布于 2020-04-02 09:20:57
私钥不存在于证书中,所以尝试使用您的证书而不是客户端证书。
证书应该有私钥
https://stackoverflow.com/questions/45553015
复制相似问题