在安装客户端证书的公共部分,我收到例外“对象只包含密钥对的公共部分,也必须提供私人密钥”。我的应用程序是通过ASP.NET平台运行的VC#.NET应用程序。该应用程序还使用WSE 2.0将证书导入制作SOAP请求。对象只包含密钥对
经研究,我发现,这个异常的类型System.Security.Cryptography.CryptographicException的。
我敢肯定的我所有的WSE设置是否正确配置,因为我可以按主题区分的名称来找到一个类似的证书。任何想法将不胜感激。
在安装客户端证书的公共部分,我收到例外“对象只包含密钥对的公共部分,也必须提供私人密钥”。我的应用程序是通过ASP.NET平台运行的VC#.NET应用程序。该应用程序还使用WSE 2.0将证书导入制作SOAP请求。对象只包含密钥对
经研究,我发现,这个异常的类型System.Security.Cryptography.CryptographicException的。
我敢肯定的我所有的WSE设置是否正确配置,因为我可以按主题区分的名称来找到一个类似的证书。任何想法将不胜感激。
我最近遇到了同样的问题。我发现one explanation here对我有用。具体来说就是私钥的权限。完整的信息复制如下。
有,我会 先看几件事情:
- 你有这个证书的私钥?
- 你为youf应用程序来访问私有 键获得许可?
可以建立你是否有通过Windows证书存储区查看证书 一个 私钥。 要实现此目的,请按照下列步骤操作:
- 从Windows开始菜单中选择运行。
- 在打开:字段中输入mmc。单击确定。
- 从文件菜单中选择“添加/删除管理单元”。
- 单击添加按钮。
- 从Available Standalone Snap-ins列表中选择“Certificates”。 点击添加按钮。
- 选择“计算机帐户”。点击下一步。
- 选择“本地计算机”。点击完成。
- 单击关闭。
- 单击确定。
- 展开控制台根目录下的证书节点并打开 个人存储。
- 双击您正在使用的证书。如果你有一个私人 键,显示画面也将在那说底部显示一个消息 “您有一个对应于这个 证书 私钥”。
如果你有一个私钥,然后确保 您的应用程序有权 访问密钥:
- 打开Windows资源管理器。
- 导航到C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys 文件夹。
- 选择包含密钥的文件,WSE将需要 检索。
- 从文件菜单中选择属性。
- 在安全选项卡上,添加ASPNET帐户,然后选择完全控制选项 控制选项。
- 说明: 1.确定与证书关联的MachineKeys文件夹中的哪个密钥文件是 可能是 困难。一个简单的方法是注意 创建日期和时间 创建新证书。当您 查看MachineKeys 目录中的文件时,请检查Date Modified 字段中的相应日期和 时间。 2.如果您已将系统配置为在与ASPNET不同的 帐户下运行,请在授予访问 证书权限时使用该帐户 。
遇到相同的异常后: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);
更新应用程序池标识后,没有私钥文件覆盖更改应用程序池所有者时是必要的。
谢谢。这有帮助。 (我有一个私钥,但我的应用程序无法访问它)。 – KKP 2010-12-22 00:25:40
检查此答案关于如何找出哪个机器密钥对应于证书:http://serverfault.com/a/642279/401044 – jtate 2017-04-04 21:43:57