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

.NET Framework 4.8连接仅支持TLS 1.3的HTTPS服务器报错解决

.NET Framework 4.8访问TLS 1.3服务器的SSL/TLS通道问题解决

问题背景

  • 运行环境:.NET Framework 4.8、Windows 10(已安装对应框架)
  • 需求:从指定地址获取XML数据,目标服务器仅支持TLS 1.3
  • 异常表现:
    • 初始代码设置ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13时,报错"客户端和服务器无法通信,因为它们没有共同的算法",Wireshark抓包发现未发送TLS Client Hello
    • 添加Windows 10启用TLS 1.3的注册表设置后,抓包可见Client Hello,但仍报错"请求已中止:无法创建SSL/TLS安全通道"
  • 对比验证:同一机器上Chrome浏览器、Python requests库均可正常访问该接口

解决办法

直接移除代码中手动设置ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13的语句,让.NET Framework自动协商TLS版本。

正确代码示例

使用HttpClient

using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using (var httpClient = new HttpClient())
        {
            var response = await httpClient.GetAsync("https://ssi.gouv.fr/uploads/tl-fr.xml");
            response.EnsureSuccessStatusCode();
            var xmlData = await response.Content.ReadAsStringAsync();
            // 后续XML处理逻辑
        }
    }
}

使用WebRequest

using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        var request = WebRequest.Create("https://ssi.gouv.fr/uploads/tl-fr.xml");
        using (var response = request.GetResponse())
        using (var stream = response.GetResponseStream())
        using (var reader = new StreamReader(stream))
        {
            var xmlData = reader.ReadToEnd();
            // 后续XML处理逻辑
        }
    }
}

原因说明

.NET Framework 4.8默认支持自动TLS协商,会根据系统配置和服务器支持的协议自动选择最优版本(包括TLS 1.3,只要Windows 10已通过注册表启用)。手动强制指定Tls13会限制框架的协商逻辑,可能导致加密套件不匹配,反而无法完成SSL/TLS握手。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:05:18