Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WCF-很可能证书。。。可能没有能够进行密钥交换的私钥_.net_Wcf_Iis_Certificate_X509certificate - Fatal编程技术网

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

.net WCF-很可能证书。。。可能没有能够进行密钥交换的私钥,.net,wcf,iis,certificate,x509certificate,.net,Wcf,Iis,Certificate,X509certificate,我试图在我的WCF服务中促进加密SOAP消息传递。为了做到这一点,我必须为生产安装和配置证书。当我使用现有的机器证书时,一切正常。但是我不想使用那个证书,所以我创建了一个新的证书,它是我使用“Web服务器”模板通过Active Directory证书服务获得的。当我在Web.config中实现此证书时,现在我在尝试查看WSDL时收到以下错误消息: 密钥集不存在。 证书“CN=myservice.mydomain.com,O=My Company,L=My City,S=My State”可能没有

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

密钥集不存在。 证书“CN=myservice.mydomain.com,O=My Company,L=My City,S=My State”可能没有能够交换密钥的私钥,或者进程可能没有私钥的访问权限。有关详细信息,请参见内部异常

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

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

  • 我已确认(使用winhttpcertcfg和MMC)我的证书位于同一个存储区(本地\u MACHINE\my),并且它们具有相同的权限分配
  • 我已确认我的IIS应用程序池正在网络服务下运行,甚至尝试重新启动池
  • 两个证书都由同一CA颁发和签署,该CA位于受信任的根CA存储文件夹中
  • 两个证书都将密钥用法显示为“数字签名、密钥加密(a0)”

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

    在经历了许多混乱和紧张之后,我终于解决了我的问题,现在我将与您分享

    首先,我认为网络上关于这个主题的很多建议已经过时了。至少在我的环境中(IIS 7和Windows 2008),不再需要web CA接口/certsrv,winhttpcertcfg也不再需要。两者都由MMC替代

    最后,我要做的是:

  • 使用证书模板控制台在我的CA上安装新的证书模板
    • 复制现有的Web服务器模板
    • 确保使用Windows Server 2003版本(因为2008会导致“指定的提供程序类型无效”错误)
    • 将私钥标记为可导出(仍不完全确定为什么/是否有必要,但许多帖子建议这样做)
    • 在“安全”选项卡下为“域计算机”和“已验证用户”授予“注册”权限
  • 使用证书颁发机构“颁发”新的证书模板
  • 使用web服务器上MMC中的证书管理单元,请求新证书
    • 从Personal\Certificates文件夹中,右键单击,然后选择所有任务->请求新证书。这是/certsrv web CA接口的一个简单的替代方案
    • 当提示输入其他信息时,请确保指定公共名称字段
  • 通过右键单击证书并选择所有任务->管理私钥,将网络服务的权限授予新证书。(这是使用winhttpcertcfg的一个很好的简单替代方法)

  • 我没有发现任何一篇文章或博客文章在一个地方提供了所有这些信息,我不得不从六到七个不同的推荐解决方案中拼凑出来。希望这能帮助其他人摆脱我所忍受的麻烦。

    当你打开证书时,它是否会说它实际上有私钥?是的,两个证书都有。两个私钥都不可导出,但都有。谢谢