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

.NET Core应用调用HTTPS服务抛SSL连接异常,.NET 4.x正常

.NET Core调用HTTPS .asmx服务部署后SSL连接失败问题

问题场景

我开发了一个通过HTTPS调用.asmx服务的应用,存在以下差异表现:

  • .NET 4.x版本控制台应用:本地运行、服务器部署后均正常工作
  • .NET Core 3.1/6.0版本控制台应用:本地Visual Studio 2022环境及生成的.exe文件运行正常,但部署到服务器后出现SSL连接错误

错误信息

无法建立SSL连接,请查看内部异常。
System.ServiceModel.CommunicationException

内部异常:

身份验证失败,因为远程方已关闭传输流。

已排查/已执行操作

  • 确认托管.asmx服务的远程服务器、部署目标服务器均启用TLS 1.2
  • 已在应用中添加代码指定TLS版本:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

解决方向

1. 检查服务器证书信任链

服务器可能未安装asmx服务端证书的根证书或中间证书,导致.NET Core无法验证证书合法性。手动将服务端证书导入服务器的「受信任的根证书颁发机构」存储即可。

2. 改用.NET Core原生TLS配置方式

.NET Core中ServicePointManager的优先级低于框架原生配置,可通过以下方式设置:

  • 配置文件方式:在appsettings.json中添加:
"System.Net.Security": {
  "SslProtocols": "Tls12"
}
  • 代码方式(HttpClient场景):
var handler = new HttpClientHandler();
handler.SslProtocols = SslProtocols.Tls12;
using var client = new HttpClient(handler);
// 后续调用逻辑

3. 检查服务器Schannel注册表配置

确认服务器的Schannel组件已正确启用TLS 1.2,检查以下注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
确保:

  • Enabled DWORD值设为0xffffffff
  • DisabledByDefault DWORD值设为0

4. 验证加密套件兼容性

部分老旧.asmx服务仅支持特定加密套件,而.NET Core默认加密套件与.NET Framework存在差异。可通过Wireshark抓包查看SSL握手失败阶段,或在代码中指定兼容的加密套件(需通过SslStream相关API配置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:52:17