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

9
我正在创建一个WCF服务,它托管在Windows Vista SP1上的IIS7中。我遇到了以下错误:
证书'CN=SignedByLocalHost'必须具有可进行密钥交换的私钥。该进程必须具有访问私钥的权限。
看起来我需要为主机进程提供对证书的访问权限,这之前是使用winhttpcertcfg完成的,但已被Vista弃用。我找到的文章指示使用证书控制台,但我似乎缺少一些东西,因为我没有看到任何编辑证书的能力。
任何帮助都将不胜感激!
谢谢
3个回答

8

搞定了。

假设你在c:\OutCert有一个自签名证书,以下命令将起作用。我忘记加上 -sky exchange 参数了。

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工具并管理私钥? - JL.
这个“所有任务/管理私钥”在哪里?我正在运行Windows 2008 R2,但在MMC中没有看到这个选项... - essedbl
2
如果您在MMC证书快照中右键单击证书,然后单击所有任务,但只看到打开和导出...,那么双击证书,您将不会看到任何有关私钥的提及--没有附加。尝试个人证书,通常在“常规”选项卡上显示“您拥有与此证书对应的私钥”,然后尝试右键单击“所有任务”,您将看到“管理私钥...”。仅当存在要管理的私钥时才会显示它。 - Jim Flood
1
如果你仍然看不到“管理私钥...”选项,请确保在加载MMC控制台插件时使用的是“计算机帐户”证书存储而不是“我的用户帐户”存储。 - Crackerjack
“管理私钥”选项仅在LocalMachine/StoreName下找到。您不会在CurrentUser/..或Service/..下找到它,至少在Win7中不会。但是一旦您执行了管理操作,就可以将证书导出或复制到其他存储区(如Currentuser/Service),并且应该保留相同的权限。 - Brian
如果你使用的是Windows 7操作系统,请按照第一个答案进行操作。 - JoshBerke

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

那样做容易多了,比我的方式简单得多。我的方法是旧的IIS6方法。 - JoshBerke

0
如果有人来到这个问题,因为找不到“管理私钥”选项,Crackerjack给出的回答解决了我的问题:
“确保在加载MMC插件时使用的是‘计算机帐户’证书存储而不是‘我的用户帐户’存储。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接