首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象仅包含密钥对的公共部分。

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

Stack Overflow用户
提问于 2009-12-13 10:18:57
回答 3查看 11.2K关注 0票数 5

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

经过研究,我发现这个异常的类型是System.Security.Cryptography.CryptographicException.

我非常肯定我所有的WSE设置都是正确配置的,因为我能够通过主题可分辨名称找到类似的证书。我们将非常感谢您的任何想法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-09 22:39:31

我最近也遇到了同样的问题。我找到了适合我的one explanation here。具体地说,私钥的权限。完整的信息在下面复制。

我首先要看几件事:

  1. 您有此certificate?
  2. Have的私钥吗?您授予了您的应用程序访问私钥的权限?

您可以通过Windows证书存储区查看证书来确定您是否拥有私钥。要实现这一点,请执行以下步骤:

  1. 从Windows开始菜单中,选择运行。
  2. 在打开:字段中键入mmc。单击OK
  3. 从文件菜单中选择" Add /Remove Snap-in“。
  4. 从可用独立管理单元列表中单击Add button.
  5. Select”Certificate“。单击Add button.
  6. Select "Computer account“。单击下一步。
  7. 选择“本地计算机”。单击Finish.
  8. Click Close。
  9. 单击OK。展开控制台根目录下的证书节点,然后打开您正在使用的Personal store.
  10. Double-click
    1. 。如果您有私钥,对话框会在底部显示一条消息,说明“您有一个对应于此certificate".

的私钥

如果您有私钥,请确保您的应用程序具有访问该密钥的权限:

打开Windows Explorer.

  • Navigate到C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys folder.

  • Select包含密钥的文件,选择“安全”选项卡,添加帐户,然后选择“Full
  1. MachineKeys 1”。很难确定MachineKeys文件夹中的哪个密钥文件与证书相关联。一种简单的方法是在创建新证书时记下创建日期和时间。查看MachineKeys目录中的文件时,请检查Date Modified字段中相应的日期和时间。2.如果已将系统配置为在与ASPNET不同的帐户下运行,则在授予访问certificate.

的权限时使用该帐户

票数 15
EN

Stack Overflow用户

发布于 2019-02-22 14:36:00

根据我的经验,它可能会因为两个原因而失败。

  1. 检查您的证书是否有可用的私钥。
  2. 如果是.net应用程序,请检查您是否已授予证书权限,以确保您的应用程序具有访问证书的权限。在我的例子中,添加"iis_iusrs“并授予读权限对我来说是可行的。谢谢。
票数 1
EN

Stack Overflow用户

发布于 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:

代码语言:javascript
复制
clientToken = X509TokenProvider.CreateToken(StoreLocation.LocalMachine, 
   StoreName.TrustedPeople, "soap.partnersite.com", X509FindType.FindBySubjectName);

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

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

https://stackoverflow.com/questions/1895366

复制
相关文章

相似问题

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