在 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 文档是否完全不正确?