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

CentOS环境下Python requests访问站点SSL证书验证失败如何解决

问题原因与解决步骤

1. 核心错误点

你混淆了requests两个SSL参数的作用:

  • cert参数用于客户端身份验证,需要传入客户端的证书+私钥组合,你传入服务端站点证书必然会触发PEM加载报错,因为缺少匹配的私钥。
  • 自定义信任的服务端证书/CA根证书,需要将证书路径传给verify参数。

2. 单请求临时解决方案

确认你导出的证书文件路径正确,直接使用以下代码即可正常访问:

import requests
resp = requests.get('https://dadosabertos.bndes.gov.br', verify='./bndes-gov-br.pem')
print(resp.status_code)

如果你导出的是完整证书链,直接将证书链文件路径传给verify参数即可。

3. 全局生效方案(无需每次请求传参)

requests默认使用certifi库提供的CA证书包,将站点证书追加到该证书包即可实现全局信任:

3.1 查找certifi证书包路径

执行以下Python代码获取路径:

import certifi
print(certifi.where())
# 输出示例:/opt/python3/lib/python3.6/site-packages/certifi/cacert.pem

3.2 追加站点证书到证书包

执行shell命令(替换为上一步输出的实际路径):

cat ./bndes-gov-br.pem >> /opt/python3/lib/python3.6/site-packages/certifi/cacert.pem

操作完成后直接调用requests.get('https://dadosabertos.bndes.gov.br')即可正常访问。

4. 系统级信任方案

如果需要系统所有程序都信任该证书,可配置系统CA存储:

# 复制证书到系统CA锚点目录
cp ./bndes-gov-br.pem /etc/pki/ca-trust/source/anchors/
# 更新系统CA证书
update-ca-trust extract

之后配置环境变量REQUESTS_CA_BUNDLE=/etc/pki/tls/certs/ca-bundle.crt,requests就会优先使用系统CA证书库完成验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:36:05