在安装客户端证书时,我得到一个异常:"Object只包含密钥对的公共部分。还必须提供私钥“。我的应用程序是一个在ASP.NET平台上运行的VC#.NET应用程序。该应用程序还使用WSE2.0将证书导入到发出SOAP请求中。
经过研究,我发现这个异常的类型是System.Security.Cryptography.CryptographicException.
我非常肯定我所有的WSE设置都是正确配置的,因为我能够通过主题可分辨名称找到类似的证书。我们将非常感谢您的任何想法。
发布于 2010-08-09 22:39:31
我最近也遇到了同样的问题。我找到了适合我的one explanation here。具体地说,私钥的权限。完整的信息在下面复制。
我首先要看几件事:
您可以通过Windows证书存储区查看证书来确定您是否拥有私钥。要实现这一点,请执行以下步骤:
的私钥
如果您有私钥,请确保您的应用程序具有访问该密钥的权限:
打开Windows Explorer.
的权限时使用该帐户
发布于 2019-02-22 14:36:00
根据我的经验,它可能会因为两个原因而失败。
发布于 2014-10-15 21:22:52
在遇到同样的异常之后: System.Security.Cryptography.CryptographicException,对象只包含密钥对的公共部分,我证明了一个替代的但不是最优的解决方案。
情况:证书/密钥查找在Visual Studio IIS Express中工作得很好,但是当Web应用程序在适当的IIS服务下运行时,我总是收到“只包含密钥对的公共一半”异常。
我使用WSE3 CertificateTool找到了文件系统上的私钥部分,并根据上面的回答详细地尝试调整用户权限设置以赋予ASP用户权限。
我最终的解决办法是创建一个特定于我的Web服务代码的新IIS应用程序池,并设置该池作为证书的本地计算机所有者运行的用户标识+私钥。
我安装证书的最终位置是“本地计算机/受信任的人”。
使用WSE3 CustomPolicyAssertion,C# .NET:
clientToken = X509TokenProvider.CreateToken(StoreLocation.LocalMachine,
StoreName.TrustedPeople, "soap.partnersite.com", X509FindType.FindBySubjectName);更新应用程序池标识后,在更改应用程序池所有者时不需要覆盖私钥文件。
https://stackoverflow.com/questions/1895366
复制相似问题