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

Ubuntu服务器上ASP.Net Core出现SSL握手错误求助

解决Ubuntu上ASP.NET Core HttpClient SSL握手错误(unsafe legacy renegotiation disabled)

这个错误的根源是目标服务器采用了不安全的旧版SSL重协商机制,而现代OpenSSL默认禁用了该机制,所以不管是ASP.NET Core的HttpClient还是curl发起请求都会失败。

针对ASP.NET Core应用的解决方案

直接配置HttpClientHandler

在创建HttpClient时,显式开启旧版重协商支持:

var handler = new HttpClientHandler();
handler.SslOptions.AllowLegacyRenegotiation = true;
// 可选:指定目标服务器支持的SSL协议,比如TLS 1.2
handler.SslOptions.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;

var httpClient = new HttpClient(handler);

使用IHttpClientFactory注册(推荐)

如果项目用依赖注入管理HttpClient,在Startup/Program.cs中配置:

services.AddHttpClient("LegacyServerClient")
    .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
    {
        SslOptions = { AllowLegacyRenegotiation = true }
    });

之后在需要的地方注入IHttpClientFactory,获取命名客户端即可。

测试用curl的临时解决方法

运行curl时添加--legacy-renegotiation参数:

curl --legacy-renegotiation https://目标服务器地址

如果还有证书问题,可临时加上--insecure跳过证书验证(仅测试用):

curl --insecure --legacy-renegotiation https://目标服务器地址

全局OpenSSL配置(不推荐)

如果需要让所有应用都允许旧版重协商,可修改OpenSSL全局配置(会降低系统整体安全性,谨慎使用):

  1. 编辑/etc/ssl/openssl.cnf文件
  2. 在[openssl_init]区块下添加:
ssl_conf = ssl_sect
  1. 在文件末尾添加以下内容:
[ssl_sect]
system_default = system_default_sect

[system_default_sect]
Options = UnsafeLegacyRenegotiation
  1. 保存文件后,重启ASP.NET Core应用或服务器生效。

注意:允许旧版重协商会引入安全风险,仅在目标服务器无法升级SSL配置的情况下临时使用,优先推动目标服务器升级到符合现代安全标准的SSL协议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:45:37