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

AWS EC2新实例运行Python代码遇SSL: CERTIFICATE_VERIFY_FAILED错误求助

Hey,我碰到过好几次类似的AWS EC2新实例SSL验证问题,结合你的场景(Windows Server 2012,旧实例正常新实例报错),给你几个靠谱的排查和解决方向:

解决AWS EC2 Windows Server 2012实例中Python SSL证书验证失败的问题

1. 先检查系统根证书是否缺失/过时

新创建的EC2 Windows实例往往默认没有同步最新的根证书,而旧实例因为运行时间长,可能已经通过Windows更新补全了。你可以这么操作:

  • 打开控制面板 → Internet选项 → 内容标签 → 证书 → 受信任的根证书颁发机构
  • 对比旧实例的证书列表,看看是否缺少API服务证书对应的根CA证书
  • 快速同步根证书的方法:打开命令提示符,执行 certutil -syncWithWU,让系统从Windows更新服务器拉取最新的根证书;也可以直接从旧实例导出需要的根证书,导入到新实例的受信任根存储区

2. 确认Python环境的证书配置

不同Python发行版的证书依赖逻辑不一样,排查起来可以分两步:

  • 如果是标准CPython,它通常依赖系统根证书,但也可能用certifi库维护自己的证书链。你可以检查Python安装目录下的 Lib\site-packages\certifi\cacert.pem 文件,对比旧实例的这个文件是否一致。要是新实例的文件版本旧,要么执行 pip install --upgrade certifi 更新,要么直接把旧实例的cacert.pem复制过来替换
  • 用requests测试的话,可以临时指定证书文件验证(别用verify=False,生产环境绝对禁止):
    import requests
    # 替换成你的证书路径,比如旧实例的cacert.pem路径
    response = requests.get("你的API地址", verify="C:/PythonXX/Lib/site-packages/certifi/cacert.pem")
    

3. 排查网络和代理配置差异

新实例的网络设置可能和旧实例不一样,这也会影响SSL验证:

  • 打开Internet选项 → 连接 → 局域网设置,确认是否启用了代理服务器,旧实例如果没代理,新实例也得保持一致
  • 检查AWS安全组和网络ACL,确保实例能访问证书验证需要的地址(比如CRL吊销列表、OCSP服务地址),这些是SSL验证过程中必须访问的
  • 先用浏览器打开API地址,如果浏览器也弹证书警告,那问题肯定在系统证书;如果浏览器正常,那大概率是Python环境的证书配置问题

4. 验证API服务的证书本身

虽然旧实例没问题,但也不妨确认下API的证书是否有变化:

  • 用浏览器访问API,查看证书详情,确认证书没过期、CA是受信任的,而且SAN(主题备用名称)包含你访问的域名
  • 用OpenSSL命令在实例上验证(如果装了OpenSSL):
    openssl s_client -connect your-api-domain:443
    
    看输出里的验证结果,有没有明确的错误提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:16:27