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

C# .NET Core 3.1 发起TLS 1.3 Web请求提示无通用算法如何解决?

问题根因分析
  • 系统版本限制:Windows 11 21H2/Windows Server 2022及以上版本才原生支持TLS 1.3协议与X25519椭圆曲线加密算法,更低版本Windows未默认启用/不支持该类TLS 1.3所需加密套件,会触发算法不兼容报错
  • .NET版本限制:SecurityProtocolType.Tls13枚举仅在.NET 5/.NET Core 3.0及以上版本原生支持,.NET Framework全版本(最高4.8.1)未官方适配TLS 1.3,手动赋值枚举值也会因底层WinHTTP接口不支持报错
  • 代码配置顺序错误:ServicePointManager.SecurityProtocol的设置需要在创建HttpWebRequest实例前完成,实例创建后对应请求的ServicePoint已经初始化,后续的协议配置不会生效
可行解决方案

方案1:升级运行环境(推荐)

  1. 升级操作系统到Windows 11 21H2/Windows Server 2022及以上版本,Linux环境需升级内核到4.17+并安装OpenSSL 1.1.1及以上版本
  2. 项目升级到.NET 5及以上版本,确认System.Net相关程序集版本支持TLS 1.3枚举
  3. 调整代码配置顺序,可额外添加TLS 1.2作为降级兼容选项,修改后代码示例如下:
// 先配置安全协议再创建请求实例,兼容TLS1.2降级场景
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12;

HttpWebResponse response = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://shop.claytonengineering.com/");

request.KeepAlive = true;
request.Headers.Add("Upgrade-Insecure-Requests", @"1");
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36";
request.Headers.Add("Sec-Fetch-Mode", @"navigate");
request.Headers.Add("Sec-Fetch-User", @"?1");
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3";
request.Headers.Add("Sec-Fetch-Site", @"same-origin");

request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br");
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.9");

response = (HttpWebResponse)request.GetResponse();

string html = null;
using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
    html = stream.ReadToEnd();
}

如果调整后仍报错,可手动开启系统级TLS 1.3加密套件支持:打开组策略编辑器,依次进入「计算机配置-管理模板-网络-SSL配置设置」,打开「SSL密码套件顺序」配置项,启用后确认TLS_AES_128_GCM_SHA256等TLS 1.3加密套件、X25519椭圆曲线已在优先级列表中,配置完成后重启系统生效。

方案2:低版本环境兼容方案

无法升级系统或.NET版本的场景下,替换原生HttpWebRequest实现即可:

  • 使用自带第三方TLS实现的HTTP请求库,不需要依赖系统原生加密API,内置支持TLS 1.3与X25519、AES_128_GCM等加密套件,无需额外配置系统级加密规则
  • 替换后无需再设置ServicePointManager.SecurityProtocol,直接在对应库的配置项中指定使用TLS 1.3即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:04