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

调用AWS API时SSL验证失败求助:本地Python 2.7代码报错

解决本地Python 2.7连接DynamoDB的SSL验证失败问题

我之前碰到过几乎一模一样的情况——本地跑了两年的代码突然报SSL错误,但Lambda上完全正常,核心问题基本都出在本地环境的SSL证书链或验证配置上,毕竟AWS托管的Lambda环境会自动维护证书,而本地环境可能因为系统更新、文件损坏或路径变动出问题。下面是一步步的排查和解决方法:

1. 先确认CA证书路径是否有效

Botocore默认会使用系统的CA证书来验证DynamoDB的SSL连接,如果证书文件丢失或路径不对,就会报No such file or directory错误。

方法A:手动指定证书路径到代码里

在初始化DynamoDB资源前,给botocore指定正确的CA证书文件路径:

import sys, os, boto3, json
import botocore

# 根据你的系统替换成正确的证书路径
# Linux一般是 /etc/ssl/certs/ca-certificates.crt
# macOS如果用brew装的openssl,路径是 /usr/local/etc/openssl/cert.pem
botocore.session.Session().set_config_variable('ca_certificates_file', '/path/to/valid/ca-bundle.crt')

payload = json.dumps({'query':query})
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('table1')
response = table.get_item(Key={'item': 'item1'})

方法B:设置环境变量

在运行代码前,设置SSL_CERT_FILE环境变量指向有效的证书文件:

# Linux/macOS终端
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
# 然后运行你的Python脚本
python your_script.py

2. 验证Python 2.7的SSL模块配置

Python 2.7已经停止维护,系统更新可能导致其依赖的底层SSL库路径变动。可以先运行以下代码检查默认证书路径:

import ssl
print(ssl.get_default_verify_paths())

输出里的cafile和capath如果显示不存在,就需要手动替换成系统中实际存在的证书路径。

3. 临时跳过SSL验证(仅限测试)

如果想快速确认是不是证书验证的问题,可以在初始化DynamoDB时关闭验证(生产环境绝对不要用):

dynamodb = boto3.resource('dynamodb', verify=False)

如果这样代码能正常运行,就坐实了是证书验证的问题,再回到步骤1修复。

4. 检查本地系统时间

这个很容易被忽略:SSL证书验证对时间敏感,如果本地系统时间和实际时间偏差过大(比如超过1小时),也会触发验证失败。先确认你的系统时间是否准确,同步一下时间再测试。

为什么之前正常现在突然报错?

大概率是近期的系统更新、杀毒软件清理、环境变量改动,导致原本有效的CA证书路径失效,或者证书文件被损坏/删除了——毕竟代码本身没改,Lambda上也能正常运行,排除AWS服务端的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:52:48