Certificate 对象仅包含密钥对的公共部分

Certificate 对象仅包含密钥对的公共部分,certificate,client-certificates,Certificate,Client Certificates,安装客户端证书后,我得到的异常对象仅包含密钥对的公共部分。还必须提供私钥。我的应用程序是在ASP.NET平台上运行的VC.NET应用程序。该应用程序还使用WSE2.0将证书导入到SOAP请求中 经过研究,我发现此异常属于System.Security.Cryptography.CryptographyException类型 我非常肯定我所有的WSE设置都配置正确,因为我能够通过使用者可分辨名称找到类似的证书。任何想法都将不胜感激。我最近也遇到了同样的问题。我发现这对我有用。特别是私钥的权限。完整

安装客户端证书后,我得到的异常对象仅包含密钥对的公共部分。还必须提供私钥。我的应用程序是在ASP.NET平台上运行的VC.NET应用程序。该应用程序还使用WSE2.0将证书导入到SOAP请求中

经过研究,我发现此异常属于System.Security.Cryptography.CryptographyException类型


我非常肯定我所有的WSE设置都配置正确,因为我能够通过使用者可分辨名称找到类似的证书。任何想法都将不胜感激。

我最近也遇到了同样的问题。我发现这对我有用。特别是私钥的权限。完整信息复制到下面

有几件事我想 首先看看:

您是否有此证书的私钥? 您是否已为您的应用程序授予访问私人网站的权限 钥匙 您可以确定您是否有 通过查看证书获取私钥 通过Windows证书存储。 要实现此目的,请执行以下步骤:

从Windows开始菜单中,选择运行。 在Open:字段中键入mmc。单击“确定” 从“文件”菜单中选择“添加/删除管理单元”。 单击添加按钮。 从可用的独立管理单元列表中选择证书。 单击添加按钮。 选择计算机帐户。单击下一步。 选择本地计算机。单击Finish。 单击关闭。 单击“确定”。 展开Console根目录下的证书节点并打开 私人商店。 双击您正在使用的证书。如果你有私人房间 键,对话框将显示一条消息 底部写着你有一个 与此对应的私钥 证明书 如果您有私钥,请确保 您的应用程序是否具有权限 要访问密钥,请执行以下操作:

打开Windows资源管理器。 导航到C:\Documents and Settings\All Users\Application 数据\Microsoft\Crypto\RSA\MachineKeys 文件夹 选择包含WSE将需要删除的密钥的文件 检索 从“文件”菜单中,选择“属性”。 在安全选项卡上,添加ASPNET帐户并选择完整帐户 控制选项。 笔记: 1.确定MachineKeys文件夹中的哪个密钥文件是 与证书关联的证书可以是 困难的一个简单的方法是记录 创建日期和时间 正在创建新证书。当你 查看MachineKeys中的文件 目录,检查修改的日期 对应日期和日期的字段 时间 2.如果您已将系统配置为在不同的 使用比ASPNET更大的帐户,请使用该帐户 授予访问权限时 证书。
在遇到相同的异常:System.Security.Cryptography.CryptographyException之后,对象只包含密钥对的公共部分,我证明了另一种选择,但不是最优的解决方案

情况:证书/密钥查找在VisualStudio IIS Express中工作得很好,但是当Web应用程序在适当的IIS服务下运行时,我总是收到“仅包含密钥对的公共部分”异常

我使用WSE3 CertificateTool来定位文件系统上的私钥部分,并尝试根据上面的回答调整用户权限设置以授予ASP用户权限

我最终的解决方案并不完美,它是创建一个新的IIS应用程序池,该池特定于我的Web服务代码,并将该池运行的用户标识设置为证书+私钥的本地计算机所有者

我安装证书的最终位置是本地计算机/受信任的人

使用WSE3 CustomPolicyAssertion,C.NET:

clientToken = X509TokenProvider.CreateToken(StoreLocation.LocalMachine, 
   StoreName.TrustedPeople, "soap.partnersite.com", X509FindType.FindBySubjectName);

更新应用程序池标识后,更改应用程序池所有者时不需要私钥文件覆盖。

根据我的经验,可能由于两个原因而失败

检查您的证书是否有可用的私钥。 如果是.net应用程序,请检查您是否已授予证书权限,以确保您的应用程序具有访问证书的权限。在我的情况下,添加iis_IUSR和授予的读取权限对我来说确实有效。 谢谢
谢谢这很有帮助。我确实有私钥,但我的应用程序没有访问权限。请检查以下答案,了解如何找出哪个计算机密钥对应于证书:我曾遇到过这种情况,但我在Azure中,我不知道如何在Azure上执行这些步骤: