使用投票的 SSLError
SSLError using boto
我们在使用 aws s3
命令浏览 CLI 中的存储桶时使用了代理 + 配置文件。
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 中无效?
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_CA_BUNDLE 环境变量?:
echo $AWS_CA_BUNDLE
或
export | grep AWS_CA_BUNDLE
3。检查你的 python 环境中是否安装了 certifi?:
pip list | grep certifi
根据上述命令的输出,您可能使用的 certifi 版本(不是 boto3 的依赖项)在与 s3 端点通信时证书验证已损坏。
您需要将 OpenSSL 版本或 pin certifi 升级到稳定版本,如下所示:
sudo pip uninstall certifi
sudo pip install certifi==2015.04.28
希望对您有所帮助!
我们在使用 aws s3
命令浏览 CLI 中的存储桶时使用了代理 + 配置文件。
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 中无效?
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_CA_BUNDLE 环境变量?:
echo $AWS_CA_BUNDLE
或
export | grep AWS_CA_BUNDLE
3。检查你的 python 环境中是否安装了 certifi?:
pip list | grep certifi
根据上述命令的输出,您可能使用的 certifi 版本(不是 boto3 的依赖项)在与 s3 端点通信时证书验证已损坏。
您需要将 OpenSSL 版本或 pin certifi 升级到稳定版本,如下所示:
sudo pip uninstall certifi
sudo pip install certifi==2015.04.28
希望对您有所帮助!