Python requests使用代理时出现SSL: CERTIFICATE_VERIFY_FAILED报错如何解决
这个SSL报错是因为Bright Data代理管理器(LPM)默认开启了HTTPS流量拦截功能,会使用自签根证书替换目标站点的SSL证书,实现流量审计和代理规则匹配。Python的requests库默认会从系统根证书库/内置的certifi证书库校验站点证书,无法识别LPM生成的自签证书,因此抛出校验失败错误。verify=False方案会全局关闭证书校验逻辑,存在中间人攻击风险,且部分对证书校验有强要求的站点会请求失败,因此不建议使用。
步骤1:导出Bright Data代理管理器根证书
打开Bright Data代理管理器的本地管理面板,进入SSL设置页,导出根CA证书为PEM格式,保存到项目目录下,命名为brightdata_root_ca.pem。
步骤2:修改请求配置
这里同时修正一个常见的代理配置错误:HTTPS代理的地址前缀必须为http,而非https,代理连接通过HTTP CONNECT协议建立,不需要对代理本身做HTTPS加密。
修改后的代码如下:
import requests proxies = { "http": "http://127.0.0.1:24000", "https": "http://127.0.0.1:24000" } # verify参数填写你导出的根证书路径 resp = requests.get( "https://api.myip.com", proxies=proxies, verify="./brightdata_root_ca.pem" ) print(resp.text)
可选:全局生效配置
如果不想每次请求都传入verify参数,可以将导出的PEM证书内容追加到Python环境的certifi默认证书库中,默认路径为[你的Python安装目录]/lib/site-packages/certifi/cacert.pem,追加后所有requests请求都会默认信任Bright Data的自签证书,无需额外配置。
该方案仅新增信任Bright Data代理的根证书,不会关闭全局SSL校验逻辑,其他非法自签证书依然会被拦截,既解决了代理请求的证书报错问题,也保留了SSL传输的安全机制,可适配所有站点的代理请求。
内容的提问来源于stack exchange,提问作者rafaelzagha

