Python requests 请求报 SSLError 怎么解决?

requests 报 SSLError 的常见原因:证书验证失败、证书链不完整、本地 CA 过期、代理拦截。解决方案:更新 certifi、指定 CA 包、verify=False 临时跳过(有安全风险)。本文逐一排查。

最佳实践
Python requests 请求报 SSLError 怎么解决?封面

SSLError 说明 TLS 握手或证书验证失败。排查顺序:一、检查实际使用的 CA 包及是否需要更新;二、确认服务器证书链完整;三、公司代理抓包场景导入企业 CA;四、verify=False 仅作临时调试手段(有安全风险)。

方案一:更新 CA 证书包(先试这个)

pip install -U certifi requests

CA 列表过期是可能原因之一,应先读异常详情区分证书链、主机名和协议问题。

方案二:指定 CA 证书

import requests

# 使用企业 CA 或自签名证书
requests.get('https://internal.example.com', verify='/path/to/ca-bundle.crt')

方案三:跳过验证(仅临时调试)

requests.get('https://example.com', verify=False)

会输出 InsecureRequestWarning。安全风险:跳过验证意味着无法防御中间人攻击,生产环境禁用。关闭警告不会修复信任问题;调试后应恢复验证并修复证书链或信任配置。

其他可能原因

  • 服务器证书链不完整:服务器没配置中间证书(部分浏览器可能通过缓存或补取中间证书掩盖问题,不能依赖这种行为),让服务端修;
  • 协议版本过旧:老服务器只支持 TLS 1.0/1.1,新版 OpenSSL 默认拒绝,需服务端升级;
  • 系统时间错误:证书验证依赖时间,date 命令确认系统时间准确;
  • 企业代理抓包:公司代理替换证书,把代理的根证书加入信任或作为 verify 参数。

常见问题(FAQ)

Q:错误信息 certificate verify failed: unable to get local issuer certificate?
A:无法构建到受信任 CA 的完整链——更新 certifi,或服务器缺中间证书(用 SSL Labs 检测服务器)。

Q:浏览器访问正常,requests 报错?
A:浏览器可能使用不同的信任库、缓存或中间证书获取机制,应对照 Requests 实际 CA bundle、代理与服务器链排查。

Q:Docker 容器里报 SSL 错误?
A:精简镜像(alpine 等)可能缺 ca-certificates 包,可检查 ca-certificates;但 Requests 通常使用 certifi 或显式配置的 bundle,仅安装系统 CA 包不保证解决。自定义 verify bundle 应包含所需信任链,而不是假定自动追加到默认库。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台