使用boto的SSLError

2024-03-28 15:10:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在CLI中使用aws s3命令浏览存储桶时,我们使用的是proxy+配置文件

export HTTPS_PROXY=https://ourproxyhost.com:3128
aws s3 ls s3://our_bucket/.../ --profile dev

我们可以很好地使用水桶和物品

因为我需要为此编写Python代码,所以我使用boto3进行了翻译:

# python 2.7.12
import boto3                        # v1.5.18
from botocore.config import Config  # v1.8.32

s3 = boto3.Session(profile_name='dev').resource('s3', config=Config(proxies={'https': 'ourproxyhost.com:3128'})).meta.client
obj = s3.get_object(Bucket='our_bucket', Key='dir1/dir2/.../file')

我得到的是:

botocore.vendored.requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

为什么它在CLI中工作,而在Python中不工作


Tags: httpsdevimportcomawsconfigclis3
2条回答
 botocore.vendored.requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

在大多数情况下,上面的错误通常与用于S3连接的CA包有关

可能的解决步骤:

1。关闭SSL认证验证:

s3 = boto3.client('s3', verify=False)

如本boto3 documentation中所述,此选项关闭SSL证书的验证,但仍将使用SSL协议(除非use_SSL为False)进行通信

2。检查是否设置了AWS\u CA\u BUNDLE环境变量:

echo $AWS_CA_BUNDLE

export | grep AWS_CA_BUNDLE

3。检查python环境中是否安装了certifi?:

pip list | grep certifi

根据上述命令的输出,您可能正在使用一个版本的certifi(它不是boto3的依赖项),在与s3端点通信时,该版本的证书验证已中断

您需要将OpenSSL版本或pin认证升级到稳定版本,如下所示:

sudo pip uninstall certifi
sudo pip install certifi==2015.04.28

希望这有帮助

相关问题 更多 >