【发布时间】:2011-01-18 13:45:30
【问题描述】:
在有人将此标记为与另一个充满关于 WCF 问题的桶重复的内容之前,我不想要 MSDN 链接和博客文章参考。我可以自己谷歌,并且已经在这 3 天了,所以如果你只有谷歌链接,请弃权。
我在使用 wsHttpBinding 和自定义密码验证器的 IIS 托管 WCF 服务上玩得很开心。 IIS 对我的标准 ASPX 和 WCF 非安全服务运行良好(使用安全模式 =“无”的 wsHttpBinding,但尝试安全模式 =“消息”或“传输”需要混合使用 SSL 证书。我说的对我收到此错误: "证书 'CN=SignedByCA' 必须具有能够进行密钥交换的私钥。该进程必须具有对私钥的访问权限。"
根据我的研究,托管我的 WCF 服务的服务无法访问我的证书的私钥文件,或者我没有正确生成证书。
我使用以下方法生成了密钥:
makecert -n "CN=TempCA" -r -sv TempCA.pvk TempCA.cer
makecert -sk SignedByCA -iv TempCA.pvk -n "CN=SignedByCA" -ic TempCA.cer SignedByCA.cer -sr currentuser -ss My
然后我将 TempCA 证书导入到我的受信任的根证书颁发机构存储中,并将 SignedByCA.cer 导入到本地计算机的“个人”存储中。 WCF 现在可以看到证书,但上述错误表明权限问题或密钥问题。我也尝试将证书导入 IIS Admin Service 的个人存储,但不成功。
顺便说一句,我已将此添加到我的 web.config 中以用于服务:
<serviceCertificate
findValue="...."
x509FindType="FindByThumbprint"
storeLocation="LocalMachine"
storeName="My"
/>
当我添加/更新服务引用时,我的客户项目出现错误。
根据我的研究,在 Windows 7 上,我应该能够使用证书管理器并右键单击 MMC 管理单元中的证书,然后选择所有任务 -> 管理私钥.. 或类似的。当我右键单击证书时,我没有看到该选项,我在所有任务下只有这些选项:[打开,使用新密钥请求证书,使用新密钥更新证书,导出...] 这让我相信它是证书问题而不是 priv 问题。
提前致谢。
【问题讨论】:
-
我重新生成了我的证书,还创建了一个 .spc 文件和一个 .pfx 文件(使用 pvk2pfx.exe)并将 .pfx 文件加载到证书存储中,这暴露了“管理私钥”选项我之前一直在找。所以最初的问题是盲目地按照 MSDN 的说明创建一个 .cer 文件,该文件没有设置用于密钥交换。现在我可以向 IIS 添加权限。这导致了新问题,实现 Windows 7 上的 IIS7 默认不在“网络服务”下运行,我也必须更改它。
-
非常感谢您对更改运行 IIS7 的默认服务的评论。一旦我改变我的问题就解决了。非常感谢!
标签: wcf iis-7 wcf-binding wcf-security