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

Python3使用requests遇SSL error unsafe legacy renegotiation disabled问题求助

解决SSL错误:unsafe legacy renegotiation disabled

以下是几个可行的解决方案:

  • 修改OpenSSL全局配置,启用旧版协商支持
    找到系统的OpenSSL配置文件(通常为/etc/ssl/openssl.cnf)并编辑:

    1. 在[openssl_init]区块下添加一行:ssl_conf = ssl_sect
    2. 在文件末尾追加以下配置段:
    [ssl_sect]
    system_default = system_default_sect
    
    [system_default_sect]
    Options = UnsafeLegacyRenegotiation
    

    保存后重启Python程序,再执行请求即可。

  • 在代码中自定义SSL上下文,绕过限制
    直接通过requests适配器强制启用旧版协商机制:

    import requests
    from requests.adapters import HTTPAdapter
    from urllib3.poolmanager import PoolManager
    import ssl
    
    class LegacySSLAdapter(HTTPAdapter):
        def init_poolmanager(self, *args, **kwargs):
            ctx = ssl.create_default_context()
            ctx.options |= ssl.OP_LEGACY_SERVER_CONNECT  # 启用旧版协商支持
            kwargs['ssl_context'] = ctx
            return super().init_poolmanager(*args, **kwargs)
    
    # 创建会话并挂载适配器
    session = requests.Session()
    session.mount("https://", LegacySSLAdapter())
    # 用会话发送请求
    response = session.get("xxxx", verify=False)
    
  • 临时设置环境变量快速解决
    不想修改配置文件的话,执行脚本前先运行以下命令:

    export OPENSSL_CONF=<(echo -e "[openssl_init]\nssl_conf = ssl_sect\n[ssl_sect]\nsystem_default = system_default_sect\n[system_default_sect]\nOptions = UnsafeLegacyRenegotiation")
    

    之后正常执行Python脚本即可。

原因说明:这个错误是因为目标服务器使用了过时的SSL协商协议,新版OpenSSL默认禁用了这种不安全的协商模式——哪怕设置verify=False也无法解决,因为关闭证书验证和启用旧版协商是两个独立的配置项,必须显式开启旧版协商支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:10:03