3

在 Windows 上,TLS 服务器证书(位于证书存储中)附带一个私钥 (PK),该私钥位于 CSP 密钥库或 CNG 密钥库中。PK 结束的位置,可以在导入证书时指定(即在最近的 Windows 版本上),例如使用-sp(subject's provider) 参数到makecert.

现在,如果未指定提供程序,则默认值不友好。PK 最终出现在 CNG KSP 中,并且将无法被 WCF 使用。

微软表示.NET Framework 4.6.1 及更早版本不支持这些证书,因为它们使用旧版 CryptoAPI 来处理 CNG/KSP 证书。将这些证书与 .NET Framework 4.6.1 及更早版本一起使用将导致异常。

但是,我看到安装在连接服务器端的 .NET framework 4.6.1 和 .NET framework 4.6.2 之间的行为完全相同。发生的情况是服务器出现(根据自己的日志)正在愉快地侦听指定端口,但端口未打开(根据netstat -a)。Invalid provider type specified当服务器尝试打开端口时,Windows 事件日志会提及。

如果重要的话,服务器和实际端口之间有 net.tcp 端口共享。

是否有人使用 CNG KSP 中的服务器证书成功运行任何版本的 .NET(使用 WCF)? 上面的 Microsoft 文档是否完全不正确?

4

1 回答 1

2

这是一个讨论限制的链接(链接) 我成功地将私钥提供程序转换为 Microsoft Enhanced Cryptographic Provider v1.0 (CryptoAPI) 这解决了这个问题。

于 2017-06-28T15:33:13.137 回答