首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CryptographicException“签名密钥未加载”

CryptographicException“签名密钥未加载”
EN

Stack Overflow用户
提问于 2017-08-07 18:00:01
回答 2查看 5.8K关注 0票数 1

我有一些代码试图使用X509Certificate2证书对XML文档进行签名:

代码语言:javascript
复制
        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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-19 16:01:40

“解决办法”是以管理员的身份在机器上运行我们的付款附加程序。不理想,因为代码的其余部分是在没有管理员权限的情况下运行的,但我没有找到任何其他解决方案来解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2020-04-02 09:20:57

私钥不存在于证书中,所以尝试使用您的证书而不是客户端证书。

证书应该有私钥

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45553015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档