我有一些代码尝试使用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
。
答案 0 :(得分:0)
"解决方案"是在机器上以管理员身份运行我们的付款插件。 不理想,因为其余代码是为了在没有管理员权限的情况下运行而构建的,但我还没有找到任何其他解决方案来解决此问题。
答案 1 :(得分:0)
您的证书中没有私钥 因此,请尝试使用您的证书代替客户端证书
证书应具有私钥