【问题标题】:WCF Error : 'It is likely that certificate 'my cert' may not have a private key that is capable of key exchangeWCF 错误:“证书“我的证书”可能没有能够进行密钥交换的私钥
【发布时间】:2012-10-22 11:36:36
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      <httpRuntime targetFramework="4.7.2"/>

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          这是我用来解决它的步骤:

          • 启动证书管理器。运行 MMC,激活 [File]-[Add/Remove Snap-in...],然后添加“证书”,在随后的向导对话框中选择“计算机帐户”和“本地计算机”。
          • 在证书管理器中,右键点击相关证书,激活【所有任务】-【管理私钥】
          • 这为您提供了一个权限窗口。点击添加
          • 添加运行此服务的帐户名或组。

          【讨论】:

          • 当我检查管理私钥时,我看到我的用户有权限,但我仍然收到此错误?
          • 右键单击证书时,我在 MMC 中的任何位置都看不到“管理私钥”。
          • 今天早上这救了我。谢谢!!
          • 在使用新证书推出产品时遇到了这个问题。真的帮我摆脱了***。谢谢朋友!
          • @AH。请务必以管理员身份运行 MMC。尝试右键单击个人商店中的一个键,看看该选项是否显示在那里。还要确保您使用的是 .pfx 证书,而不是 .cer 证书。
          【解决方案5】:

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

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

          【讨论】:

          • 使用了makecert,使用交换参数创建了一个证书并导入。更新了 web.config 以指向新证书并得到相同的错误。还有什么我可以尝试的吗?
          猜你喜欢
          • 2014-08-23
          • 2013-07-01
          • 2021-03-15
          • 2017-11-25
          • 2014-11-26
          • 1970-01-01
          • 2019-04-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多