Python 调用 ChatGPT API 出现 SSL 证书验证失败怎么修复?

文章导读
Python 调用 ChatGPT API 报 SSL 证书验证失败,通常是因为本地 CA 证书包过期或系统时间不准确。最推荐的修复方向是更新 certifi 库或校正系统时间,严禁在生产代码中设置 verify=False 绕过验证。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Python 调用 ChatGPT API 报 SSL 证书验证失败,通常是因为本地 CA 证书包过期或系统时间不准确。最推荐的修复方向是更新 certifi 库或校正系统时间,严禁在生产代码中设置 verify=False 绕过验证。

先说结论:该错误属于客户端环境配置问题,优先更新证书包而非修改代码逻辑。

  • 先确认:检查系统时间是否同步,确认网络中间设备是否拦截 HTTPS 流量。
  • 先处理:执行 pip install `--upgrade` certifi 更新根证书,或指定正确的 CA Bundle 路径。
  • 再验证:运行最小化请求脚本,确认不再抛出 SSLError 异常。

命令速用版

如果急需恢复连接,可在终端执行以下命令更新证书包,这是最安全的临时止血方案。

pip install `--upgrade` certifi
python -m certifi

执行第二行命令可查看当前 certifi 使用的证书文件路径,便于后续配置引用。

为什么会这样

SSL 握手失败的核心原因是客户端无法验证服务器证书的合法性。

Python 的 requests 库或 openai SDK 依赖操作系统的信任存储或 certifi 包中的根证书来验证 api.openai.com 的证书。如果本地证书包版本过旧,缺少新颁发的根证书,或者系统时间与服务器时间偏差过大,都会导致验证链断裂。此外,企业内网网关若进行 HTTPS 解密审查,也会替换原有证书,导致客户端验证不通过。

分步处理

按顺序执行以下步骤,每步完成后检查错误是否消失。

步骤 1:更新证书依赖包

在虚拟环境或全局环境中升级 certifi,确保拥有最新的根证书列表。

pip install `--upgrade` certifi

步骤 2:校正系统时间

检查本地操作系统时间是否与网络时间同步,时间偏差超过几分钟会导致证书有效期验证失败。

Python 调用 ChatGPT API 出现 SSL 证书验证失败怎么修复?

步骤 3:指定 CA Bundle 路径(可选)

如果默认路径无效,可在代码中显式指定 certifi 提供的证书文件路径。

import certifi
import requests

response = requests.get(
    "https://api.openai.com/v1/models",
    verify=certifi.where()
)

步骤 4:配置企业网关证书(仅限内网)

若处于企业内网,需将网关的根证书导入到 certifi 指定的 cacert.pem 文件中,或设置 REQUESTS_CA_BUNDLE 环境变量。

怎么验证是否生效

运行一段最小化测试代码,观察是否抛出异常。

import openai
import os

os.environ["OPENAI_API_KEY"] = "your-key"
try:
    client = openai.OpenAI()
    models = client.models.list()
    print("SSL 验证通过,连接成功")
except Exception as e:
    print(f"错误:{e}")

若控制台输出“SSL 验证通过,连接成功”,且无 SSLError 报错,则修复生效。

常见坑

以下操作存在安全风险或无效,需谨慎处理。

  • 禁用验证:设置 verify=False 会暴露 API Key 给中间人攻击,严禁在生产环境使用。
  • 忽略时间:仅更新证书而不校正系统时间,错误可能反复出现。
  • 混用环境:在 Docker 容器内更新了宿主的证书包,容器内部并未同步更新。

常见问题

可以直接设置 verify=False 吗?

不可以,这会禁用 SSL 证书验证,导致通信内容可能被窃听或篡改。

为什么更新 certifi 后仍然报错?

可能是系统时间偏差过大,或者企业网关拦截了流量,需要分别校正时间或导入网关证书。

OpenAI SDK 和 requests 库处理方式一样吗?

一样,OpenAI SDK 底层依赖 httpx 或 requests,均遵循标准的 SSL 验证流程,修复方法通用。

参考来源

  • Requests 库官方文档:SSL Cert Verification,https://requests.readthedocs.io/en/latest/user/advanced/#ssl-cert-verification
  • Certifi 项目仓库:Python package for providing Mozilla's CA Bundle,https://github.com/certifi/python-certifi
  • OpenAI API 文档:Overview,https://platform.openai.com/docs/overview