.net - WCF - 证书...可能没有能够进行 key 交换的私钥

标签 .net wcf iis certificate x509certificate

我正在尝试在我的 WCF 服务中促进加密 SOAP 消息传递。为此,我必须安装并配置生产证书。当我使用现有的机器证书时,一切正常。但我不想使用该证书,因此我使用“Web 服务器”模板创建了一个通过 Active Directory 证书服务获得的新证书。当我在 Web.config 中实现此证书时,现在在尝试查看 WSDL 时收到此错误消息:

Keyset does not exist. It is likely that certificate 'CN=myservice.mydomain.com, O=My Company, L=My City, S=My State' may not have a private key that is capable of key exchange or the process may not have access rights for the private key. Please see inner exception for detail.

我已经看到很多针对此问题的帮助响应,但大多数人只是假设我有权限问题,或者我的证书位于错误的存储中,或者我的应用程序池在不同的帐户下运行。

以下是我检查过的所有内容的摘要:

  1. 我已确认(使用 winhttpcertcfg 和 MMC)我的证书位于同一存储区 (LOCAL_MACHINE\My),并且它们都具有相同的权限分配。
  2. 我已确认我的 IIS 应用程序池正在网络服务下运行,甚至尝试重新启动该池。
  3. 这两个证书均由同一 CA 颁发和签名,该 CA 位于受信任的根 CA 存储文件夹中。
  4. 两个证书均将 key 用法显示为“数字签名, key 加密 (a0)”

我还需要注意其他事项以确保我的新证书能够进行 key 交换吗?

最佳答案

经过一番折腾,终于解决了我的问题,现在分享给大家...

首先,我确定网络上有关此主题的许多建议都已经过时了。至少在我的环境(IIS 7 和 Windows 2008)中,不再需要 Web CA 接口(interface)/certsrv,winhttpcertcfg 也不再需要。两者都被 MMC 取代。

最后,我要做的是:

  1. 使用证书模板控制台在我的 CA 上安装新的证书模板
    • 复制现有的 Web 服务器模板
    • 确保使用 Windows Server 2003 版本(因为 2008 会导致“指定的提供程序类型无效”错误)
    • 将私钥标记为可导出(仍不完全确定为什么/是否有必要这样做,但许多帖子建议这样做)
    • 在“安全”选项卡下为“域计算机”和“经过身份验证的用户”提供“注册”
  2. 使用证书颁发机构“颁发”新证书模板
  3. 使用 Web 服务器上 MMC 中的证书管理单元请求新证书
    • 从“个人\证书”文件夹中,右键单击并选择“所有任务”->“请求新证书”。这是/certsrv Web CA 界面的一个很好的简单替代方案。
    • 请务必在提示输入其他信息时指定“通用名称”字段。
  4. 通过右键单击证书并选择“所有任务”->“管理私钥”,向新证书授予网络服务权限。 (这是使用 winhttpcertcfg 的一个很好的简单替代方案)

我没有找到任何一篇文章或博客文章在一个地方提供所有这些信息,我不得不从六七个不同的推荐解决方案中拼凑起来。希望这可以帮助其他人摆脱我所经历的头痛。

关于.net - WCF - 证书...可能没有能够进行 key 交换的私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541785/

相关文章:

c# - 如何成功使用 existingResponse ="Auto"?

powershell - Remove-WebVirtualDirectory ...没有强制/静默选项?

c# - 如何在代码中为 TreeView 设置 WPF 数据模板?

c# - .NET 在服务器上创建计划任务失败并显示 E_ACCESSDENIED

c# - WCF 客户端/服务器配置不匹配

c# - 使用代码添加 WCF 服务行为

.net - Entity Framework 与 LINQ to SQL

c# - 无法使用 Microsoft.Office.Interop.Excel 加载文件或程序集“office,版本 = 15.0.0.0”

c# - Silverlight 启用的 WCF 服务与 Web 服务与 ADO.NET 数据服务

security - HTTP Slow Post和IIS设置可防止