首页 文章

WCF - 证书可能没有能够进行密钥交换的私钥

提问于
浏览
4

我试图在我的WCF服务中促进加密的SOAP消息传递 . 为此,我必须安装和配置 生产环境 证书 . 当我使用现有的机器证书时,一切正常 . 但我不想使用该证书,因此我使用“Web服务器”模板通过Active Directory证书服务创建了一个新证书 . 当我在Web.config中实现此证书时,现在我在尝试查看WSDL时收到此错误消息:

键集不存在 . 证书'CN = myservice.mydomain.com,O = My Company,L = My City,S = My State'可能没有能够进行密钥交换的私钥,或者该流程可能没有访问权限私钥 . 详情请见内部异常 .

我已经看到了很多关于这个问题的帮助响应,但是大多数只是假设我有权限问题,或者我的证书存在错误的存储,或者我的应用程序池在不同的帐户下运行 .

以下是我检查过的所有内容的摘要:

  • 我已经确认(使用winhttpcertcfg和MMC)我的证书在同一个商店(LOCAL_MACHINE \ My),并且它们都具有相同的权限分配 .

  • 我已确认我的IIS应用程序池正在NETWORK SERVICE下运行,甚至尝试重新启动池 .

  • 两个证书都由同一CA颁发并签名,该CA位于受信任的根CA存储文件夹中 .

  • 两个证书都显示密钥用法为"Digital Signature, Key Encipherment (a0)"

还有什么我需要注意的,以确保我的新证书能够进行密钥交换吗?

1 回答

  • 7

    经过多次动荡和拉扯之后,我终于解决了我的问题,现在我要和你分享......

    首先,我确定网上关于这个主题的很多建议已经过时了 . 至少在我的环境中(IIS 7和Windows 2008),不再需要Web CA接口/ certsrv,winhttpcertcfg也不再需要 . 两者都被MMC取代 .

    最后,我要做的是:

    • 使用证书模板控制台在我的CA上安装新证书模板

    • 复制现有的Web服务器模板

    • 确保使用Windows Server 2003版本(因为2008导致"invalid provider type specified"错误)

    • 将私钥标记为可导出(仍然不完全确定为什么/如果这是必要的,但许多帖子建议这样做)

    • 在安全选项卡下右侧"Domain Computers"和"Authenticated Users"

    • 使用证书颁发机构"Issue"新证书模板

    • 使用Web服务器上MMC中的“证书”管理单元,请求新证书

    • 在Personal \ Certificates文件夹中,右键单击,然后选择All Tasks - > Request New Certificate . 这是/ certsrv Web CA接口的一个很好的简单替代方案 .

    • 确保在提示输入其他信息时指定“公用名”字段 .

    • 右键单击证书并选择“所有任务” - >“管理私钥”,将NETWORK SERVICE的权限授予新证书 . (这是使用winhttpcertcfg的一个很好的简单替代方案)

    我没有找到任何一篇文章或博客文章在一个地方提供所有这些信息,我不得不从六个或七个不同的推荐解决方案中拼凑出来 . 希望这有助于拯救别人免受我忍受的头痛 .

相关问题