在Windows上,TLS服务器证书(位于证书存储区中)附带私钥(PK),该私钥位于CSP密钥库或CNG密钥库中。 PK结束时,可以在导入证书时指定(即,在最近的Windows版本上),例如使用-sp
(主题提供者)参数makecert
。
现在,如果未指定提供者,则默认设置不友好。 PK最终进入CNG KSP,WCF无法使用。
Microsoft says" .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
)。当服务器尝试打开端口时,Windows事件日志会提到Invalid provider type specified
。
如果重要,那么net.tcp端口共享位于服务器和实际端口之间。
是否有人在CNG KSP中成功运行任何版本的.NET(使用WCF)和服务器证书?上述Microsoft文档是否完全错误?
答案 0 :(得分:1)
以下链接介绍了限制How do I replace multiple spaces with a single space in C#? 我成功的做法是将私钥提供程序转换为Microsoft Enhanced Cryptographic Provider v1.0(CryptoAPI),这解决了这个问题。