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

Python 3.7.1未加载默认路径CA证书问题求助

为什么Python的requests没加载我放到默认路径的证书?

这问题我之前也碰到过,核心原因其实是requests库默认的CA证书来源和你以为的不一样,咱们一步步拆解:

核心原因:requests默认用certifi的证书,而非系统/ssl模块的默认路径

你用ssl.get_default_verify_paths()看到的是系统OpenSSL的默认CA路径,但requests库为了跨平台一致性,默认并不使用这个路径——它依赖的是certifi这个第三方库提供的Mozilla维护的标准CA证书集合。所以你把证书加到系统SSL路径里,requests根本没去读。

你可以验证这一点:在Python里执行下面的代码,看看certifi的证书路径和ssl模块显示的是不是完全不同:

import certifi
print(certifi.where())

解决办法(三种可选)

1. 把证书追加到certifi的证书文件里

找到certifi的路径后,用终端命令把你的证书bundle追加进去(注意需要对应权限):

cat /usr/lib/ssl/cert.pem >> $(python -c "import certifi; print(certifi.where())")

这样requests就会自动包含你的自定义证书了。

2. 设置环境变量让requests优先用你的证书

设置REQUESTS_CA_BUNDLE环境变量指向你的证书文件,这样所有requests请求都会默认使用这个证书:

# 临时生效(当前终端会话)
export REQUESTS_CA_BUNDLE=/usr/lib/ssl/cert.pem

# 永久生效(加到~/.bashrc或~/.profile里)
echo "export REQUESTS_CA_BUNDLE=/usr/lib/ssl/cert.pem" >> ~/.bashrc
source ~/.bashrc

3. 在代码里修改requests的默认配置

如果不想改系统设置,可以在代码开头直接指定requests的默认CA路径:

import requests
import requests.utils

# 替换成你的证书路径
requests.utils.DEFAULT_CA_BUNDLE_PATH = '/usr/lib/ssl/cert.pem'

# 之后的请求就不用加verify参数了
response = requests.get('https://westeurope.experiments.azureml.net')

额外说明:关于你遇到的530状态码

你指定verify参数后返回530,这说明SSL验证已经通过了,530是Azure那边的返回逻辑(可能是访问权限、区域限制或者其他服务端配置问题),和证书加载无关——你现在的核心问题已经解决SSL验证部分,530可以单独排查Azure的服务配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:07:29