Python爬虫遇SSLCertVerificationError 求长期合规解决方案
SSL证书验证失败错误的成因与合规解决方案
错误成因
- 目标网站SSL证书变更:昨天正常今天报错,最大可能是目标网站更换了SSL证书、证书过期,或者证书链中的中间/根证书更新,导致本地信任库无法识别新的签发机构证书。
- Anaconda环境证书库未同步:Anaconda自带独立的certifi证书存储,你用
pip install --upgrade certifi更新的是pip环境的证书,但Anaconda可能没使用这个更新后的库,导致证书链不完整。 - 本地网络环境变动:比如切换了网络(公司内网、代理),新网络的防火墙或代理会篡改SSL流量,或者本地系统的根证书库太久没更新,缺失必要的信任证书。
合规的长期解决办法
同步Anaconda环境的certifi证书库
- 先找到Anaconda环境中certifi的证书文件路径,运行命令:
python -c "import certifi; print(certifi.where())" - 用conda命令升级Anaconda环境的certifi(比pip更适配Anaconda):
conda install -c conda-forge certifi - 如果升级后还是不行,可以手动替换证书文件:下载Mozilla官方的根证书集合,覆盖上述路径下的
cacert.pem文件。
- 先找到Anaconda环境中certifi的证书文件路径,运行命令:
手动指定目标网站的信任证书
如果目标网站用的是私有CA签发的证书,先下载该CA的根证书(.pem格式),然后在请求中指定证书路径:response = requests.post(url, headers=headers, data=data, verify="/path/to/your/ca-root-cert.pem" )更新本地系统根证书库
- Windows:打开控制面板 → 网络和Internet → Internet选项 → 内容 → 证书,导入缺失的根证书并设置信任。
- macOS:打开“钥匙串访问”,导入根证书,右键点击证书选择“显示简介”,在“信任”选项卡设置为“始终信任”。
- Linux:将CA证书复制到
/usr/local/share/ca-certificates/目录,执行update-ca-certificates命令更新系统信任库。
排查网络代理/防火墙
如果使用代理,检查代理是否使用了自签名证书拦截SSL流量,若是,需要把代理的CA证书加入本地信任库;同时关闭临时的防火墙或安全软件,排查是否是它们干扰了证书验证流程。
内容的提问来源于stack exchange,提问作者jacques
相关产品推荐
相关产品推荐

