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

Python requests SSL错误UNSAFE_LEGACY_RENEGOTIATION_DISABLED排查

问题根因

不是IP被黑名单拦截。
报错的核心标识是ssl.SSLError: [SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED],触发逻辑是:

  • nomads.ncep.noaa.gov站点的服务端未适配RFC 5746安全标准,仍使用存在已知漏洞的旧版TLS重协商机制
  • Ubuntu 22.04默认搭载的OpenSSL 3.0出于安全考虑,默认全局禁用了这种不安全的旧版重协商,因此TLS握手阶段直接被拦截

你更换Python侧的requests、urllib3、cryptography版本都无法解决问题,是因为这个安全限制是系统OpenSSL层的规则,和Python依赖包无关。其余HTTPS站点访问正常,是因为绝大多数公共站点早就完成了安全适配,不存在旧版重协商的问题。

解决方案

两种方案按需选择,优先推荐影响范围更小的方案1:

  • 方案1:仅在当前Python请求逻辑中放开旧版重协商限制,不修改系统全局配置,无额外安全风险
    实现代码如下:
    import requests
    import ssl
    
    class LegacySSLAdapter(requests.adapters.HTTPAdapter):
        def init_poolmanager(self, *args, **kwargs):
            ssl_context = ssl.create_default_context()
            ssl_context.options |= 0x4  # 开启SSL_OP_LEGACY_SERVER_CONNECT选项,允许旧版重协商
            kwargs["ssl_context"] = ssl_context
            return super().init_poolmanager(*args, **kwargs)
    
    # 挂载自定义适配器发起请求
    session = requests.Session()
    session.mount("https://", LegacySSLAdapter())
    resp = session.get("https://nomads.ncep.noaa.gov/")
    print(resp.status_code)
    
  • 方案2:修改系统OpenSSL全局配置,放开旧版重协商限制(不推荐,会降低全系统所有SSL连接的安全等级)
    打开系统OpenSSL配置文件:
    sudo nano /etc/ssl/openssl.cnf
    
    在文件开头的[openssl_init]段落下添加如下配置:
    ssl_conf = ssl_sect
    [ssl_sect]
    system_default = system_default_sect
    [system_default_sect]
    Options = UnsafeLegacyRenegotiation
    
    保存退出后配置立即生效,原有的requests代码无需修改即可正常访问目标站点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:46:03