19

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

异常消息是:证书 'CN= .mydomain, OU=Secure Link SSL Wildcard, OU=IT, C=US' 可能没有能够进行密钥交换的私钥,或者进程可能无权访问私钥的权利。有关详细信息,请参阅内部异常.. ---> System.ArgumentException: 证书 'CN= .mydomain.com, OU=Secure Link SSL Wildcard, OU=IT, O=mydomain, C=US' 可能不是有一个能够进行密钥交换的私钥,或者进程可能没有私钥的访问权限。有关详细信息,请参阅内部异常。---> System.Security.Cryptography.CryptographicException:句柄无效。

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

4

5 回答 5

40

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

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

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

似乎您的证书是为签名而不是密钥交换创建的,我认为这对于 SSL 证书是正常的。

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

于 2012-11-01T20:11:01.300 回答
1

这里同样的问题。为了解决这个问题,我将以下行添加到<system.web>web.config 的节点。

<httpRuntime targetFramework="4.7.2"/>

于 2019-11-04T14:29:31.220 回答
0

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

于 2018-03-26T02:44:29.457 回答
0

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

于 2021-07-09T18:42:32.800 回答