WCF错误:'证书'我的证书'可能没有能够进行密钥交换的私钥

时间:2012-11-01 19:59:41

标签: c# wcf iis wcf-binding wcf-security

我正在尝试在我们的生产Web服务器(IIS6)上托管WCF服务。我已经设置了网络并将我们的证书绑定到网络上。当我尝试浏览服务URL时,我在事件日志中收到以下错误:

  

异常消息是:很可能是证书   'CN = .mydomain,OU =安全链接SSL通配符,OU = I.T。,C = US'可能不会   有一个能够进行密钥交换的私钥或者进程可以   没有私钥的访问权限。请参阅内部异常   详情.. ---> System.ArgumentException:可能是这样   证书'CN = .mydomain.com,OU =安全链接SSL通配符,   OU = I.T。,O = mydomain,C = US'可能没有能够使用的私钥   密钥交换或进程可能没有访问权限   私钥。详情请见内部异常。 --->   System.Security.Cryptography.CryptographicException:句柄是   无效。

我已经确认ASP.Net 1.1,2和4都在'Web服务扩展'中设置为'允许'。我还确认证书已在iis中设置,并显示“您有一个与此证书相对应的私钥”。此外,执行权限设置为“脚本和可执行文件”。

5 个答案:

答案 0 :(得分:34)

我遇到了这个问题,结果发现服务运行的帐户没有访问证书私钥的权限。

以下是我用来解决它的步骤:

  • 启动Cetificate经理。通过运行MMC,激活[文件] - [添加/删除管理单元...],然后添加“证书”,在随后的向导对话框中选择“计算机帐户”和“本地计算机”来执行此操作。
  • 在证书管理器中,右键单击相关证书并激活[所有任务] - [管理私钥]
  • 这为您提供了权限窗口。点击 添加
  • 添加运行此服务的帐户名称或组。

答案 1 :(得分:2)

好像你的证书是为签名创建的,而不是密钥交换,我认为SSL证书是正常的。

如果查看makecert documentation,您可以看到-sky开关允许您指定证书是否应用于签名或密钥交换。您可以尝试使用类型交换创建自签名证书,并测试是否仍然发生异常。不要忘记将自签名证书放入计算机的受信任根证书颁发机构文件夹中,以避免证书无效的例外情况。

答案 2 :(得分:0)

还要确保需要访问证书的帐户名或组也可以访问证书所在的文件夹层次结构。如果您的证书隐藏在,例如,' C:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys'以及需要访问它的帐户是“网络服务”,然后是“网络服务”'需要访问完整的路径。仅仅为文件分配权限是不够的。

答案 3 :(得分:0)

这里有同样的问题。为了解决该问题,我在web.config的<system.web>节点中添加了以下行。

<httpRuntime targetFramework="4.7.2"/>

答案 4 :(得分:0)

我今天遇到了这个问题,它出现在从另一台服务器克隆的服务器上。我必须卸载证书,重新安装证书,并授予对证书的访问权限(与接受的答案中描述的方式相同)。