Python3使用requests遇SSL error unsafe legacy renegotiation disabled问题求助
解决SSL错误:unsafe legacy renegotiation disabled
以下是几个可行的解决方案:
修改OpenSSL全局配置,启用旧版协商支持
找到系统的OpenSSL配置文件(通常为/etc/ssl/openssl.cnf)并编辑:- 在
[openssl_init]区块下添加一行:ssl_conf = ssl_sect - 在文件末尾追加以下配置段:
[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
相关产品推荐
相关产品推荐

