由证书服务器证书定期导致的 SSL 崩溃未使用 HTTP.SYS 正确配置



我正在尝试在装有 Windows Server 2012 的服务器上安装自承载 WCF 服务。 我正在按照以下步骤操作:

  1. 使用 MMC 导入我的 PFX 文件
  2. 运行"Netsh HTTP add SSLCERT IPPORT=0.0.0.0:49000 certhash=e09280ded2322eb858b38b3250e1a488f797b269 appid={4dc3e181-e14b-4a21-b022-59fc669b0914}">

  3. 安装我的服务并启动它

起初它工作得很好。但是几个小时后,ssl 崩溃,我只能在客户端收到错误消息,如下所示

mscorlib.dll 中发生了类型为"System.ServiceModel.CommunicationException"的未处理异常。 其他信息:向 https://servername:49000/WCFServiceName 发出 HTTP 请求时出错。这可能是由于在 HTTPS 情况下,服务器证书未使用 HTTP.SYS 正确配置。这也可能是由客户端和服务器之间的安全绑定不匹配引起的。

运行"netsh http delete sslcert ipport=0.0.0.0:49000" 并删除导入的 PFX,然后重做步骤 1 和 2 可以使 SSL 再次工作,但问题仍然会在几个小时后出现。

这绝对不是安全协议问题,因为我已经尝试添加

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

在请求之前。服务器和客户端都使用 .Net Framework 4.5.2

我尝试过"netsh http show sslcert",结果如下:

IP:port                      : 0.0.0.0:49000
Certificate Hash             : e09280ded2322eb858b38b3250e1a488f797b269
Application ID               : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name       : My
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check                  : Enabled
Revocation Freshness Time    : 0
URL Retrieval Timeout        : 0
Ctl Identifier               : (null)
Ctl Store Name               : (null)
DS Mapper Usage              : Disabled
Negotiate Client Certificate : Disabled

我尝试删除端口 49000 上的 sslcert 绑定,并在 IIS 中创建了一个绑定到端口 49000 的空网站,然后让我的服务侦听该端口。它第一次工作并持续了大约一周,然后弹出相同的错误。

我应该从哪里开始定位和解决这个有线问题?

首先,我们应该确保 WCF 可以访问证书私钥。网络服务帐户(或每个人帐户)应添加到证书读取/写入器组中,然后我们使用相应的帐户运行应用程序(Windows 服务或控制台?
https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-make-x-509-certificates-accessible-to-wcf
其次,如您所知,TLS 版本需要操作系统和 Dotnetframework 支持,默认协议版本为 ssl3.0/tls1.0(自动协商,无法配置)。我们最好使用最新的操作系统版本和.netframework4.7。我认为这可能是通信不稳定的原因。
请参考以下文档。

https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls 如果问题仍然存在,请随时告诉我。

最新更新