You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server 2019上.NET 4.7.2 SSLStream忽略代理无法校验CRL求助

Windows Server 2019下SSLStream校验CRL失败的兼容性问题

我在Windows Server 2012 R2服务器上,使用.NET 4.7.2类库通过SSLStream类连接SMTP服务器发送邮件,代码如下:

...
TcpClient _tcpc = new System.Net.Sockets.TcpClient(host, port);
_tcpc.SendBufferSize = m_BlockOfBytesToSend;

sslStream = new SslStream(_tcpc.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate));
sslStream.AuthenticateAsClient(host, null, SslProtocols.Tls12, true);
...

原本运行正常,但升级到Windows Server 2019后,该类库无法正常工作,原因是无法校验远程服务器证书的吊销列表(CRL),报错信息如下:

Pid 7936.Chain status: 0:RevocationStatusUnknown:The revocation function was unable to check revocation for the certificate.
1:OfflineRevocation:The revocation function was unable to check revocation because the revocation server was offline.

我的分析如下:

  • SSLStream.AuthenticateAsClient方法使用Windows加密API校验CRL,通过winhttp API下载证书指定的CRL端点内容,本应使用服务器的winhttp代理设置,且该行为无法由开发者自定义(除了禁用CRL校验,但这不合适)
  • 通过procmon分析发现:Windows Server 2019尝试绕过代理设置直接访问CRL分发端点,而netsh winhttp show proxy显示代理设置是正确的,因无代理无法访问端点导致失败
  • 进一步对比显示:Windows Server 2012在联系企业代理下载CRL前会读取注册表中的winhttp设置,而Windows Server 2019则读取用户注册表中的Internet设置;由于我的应用以非交互式用户运行,该用户无配置文件,因此无代理设置
  • 恢复Windows Server 2012快照后问题解决,说明Windows Server 2019对winhttp API的行为做了修改,破坏了软件的向后兼容性

请问有没有人遇到过类似问题,或有相关信息可以分享?

内容的提问来源于stack exchange,提问作者Benny Evangelista

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:43:43