WCF 中的自签名证书问题 - 必须具有私钥

Posted

技术标签:

【中文标题】WCF 中的自签名证书问题 - 必须具有私钥【英文标题】:Issue with Self Signed Cert in WCF - Must have Private Key 【发布时间】:2010-09-25 13:36:57 【问题描述】:

我正在创建一个托管在 Windows Vista SP1 上的 IIS7 中的 WCF 服务。我收到以下错误:

证书“CN=SignedByLocalHost”必须具有能够进行密钥交换的私钥。该进程必须具有私钥的访问权限。

看起来我需要让主机进程评估过去使用 winhttpcertcfg 完成的证书,该证书已被 Vista 弃用。我发现的文章表明使用证书控制台,但我缺少一些东西,因为我看不到任何编辑证书的能力。

任何帮助都会很棒!

谢谢

【问题讨论】:

【参考方案1】:

想通了。

假设您在 c:\OutCert 有一个自签名证书,则以下命令将起作用。我已经停止了 -sky 交换。

makecert -sk SignedByCA -iv c:\OutCert.pvk -n "CN=MyLocalHost" -ic c:\OutCert.cer -sr LocalMachine -ss My -sky exchange pe

现在您可以进入 MMC 工具并管理私钥并授予 IIS 对密钥的访问权限。要管理私钥,请右键单击证书并选择All Tasks / Manage Private Keys

【讨论】:

请解释一下 - 详细说明您如何使用 MMC 工具和管理私钥? 所有任务/管理私钥在哪里?我正在运行 Windows 2008 R2,但在 MMC Snap in 中没有看到该选项... @essedbl:如果您右键单击 MMC 证书管理单元中的证书,然后单击所有任务,您看到的只是打开和导出...,然后双击证书,您不会看到任何提及私钥 - 没有附加。在 Personal 中尝试一个证书,在 General 选项卡上显示“您有一个与此证书对应的私钥”,然后尝试右键单击“All Tasks”,您将看到“Manage Private Keys... ”。仅当存在要管理的私钥时才会显示。 如果您仍然没有看到“管理私钥...”,请确保您在加载 MMC 时使用的是“计算机帐户”证书存储而不是“我的用户帐户”存储管理单元。 “管理私钥”选项只能在 LocalMachine/StoreName 下找到。您不会在 CurrentUser/.. 或 Service/.. 下找到它,至少在 Win7 中不会。但是一旦您执行了管理,您就可以将证书导出或复制到其他商店(如 Currentuser / Service),它应该保留相同的权利。【参考方案2】:

您可以使用 IIS 7.0/7.5 刚开始->运行->inetmgr 选择服务器 在“安全”面板下,转到“服务器证书” 在左侧窗格中单击 - “创建自签名证书”并完成该过程 crtfiticate 将安装在 LocalMachine StoreLocation 的 Personal 商店名称下。 现在在您的 WCF 服务中使用此证书,您将不会遇到此错误

【讨论】:

这比我的方式要容易得多。我的方法是旧的 IIS6 方法

以上是关于WCF 中的自签名证书问题 - 必须具有私钥的主要内容,如果未能解决你的问题,请参考以下文章

未找到具有有效签名身份(即证书和私钥对)的配置文件

是否可以强制 WCF 测试客户端接受自签名证书?

将 Windows 证书存储中的证书和私钥与 OpenSSL 一起使用

公钥加解密、数字签名、CA证书简介

证书与私钥匹配

SSL证书问题:证书链中的自签名证书