Boto [SSL: CERTIFICATE_VERIFY_FAILED] 连接到 S3 时证书验证失败

问题描述 投票:0回答:8

我尝试使用 boto 连接到 S3,但似乎失败了。我尝试了一些解决方法,但它们似乎不起作用。谁能帮我解决这个问题吗?下面是代码。

import boto

if not boto.config.has_section('Credentials'):
    boto.config.add_section('Credentials')
boto.config.set('Credentials', 'aws_access_key_id', AWS_KEY)
boto.config.set('Credentials', 'aws_secret_access_key', AWS_SECRET_KEY)
if not boto.config.has_section('Boto'):
    boto.config.add_section('Boto')
    boto.config.set('Boto', 'https_validate_certificates', 'False')
    boto.config.add_section('aws info')
    boto.config.set('aws info','aws_validate_certs','False')



s3 = boto.connect_s3(validate_certs=False)
bucket = s3.get_bucket(Bucket_NAME)
python amazon-web-services amazon-s3 boto
8个回答
15
投票

可能您的存储桶名称包含一个点,这就是 ssl 证书验证失败的原因。这是一个相当常见的问题,例如,请参阅这个 github issues

不要使用不安全的连接 (

is_secure=False
),而使用
OrdinaryCallingFormat
:

import boto
conn = boto.s3.connect_to_region('eu-west-1', calling_format=boto.s3.connection.OrdinaryCallingFormat())
bucket = conn.get_bucket(your_bucket)

您可能需要更新您的 AWS 区域,例如

us-east-1


13
投票

在boto3中,如果您使用的是s3客户端,请在创建s3客户端时使用verify=False。 例如:

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

正如 boto3 文档中提到的,这只会关闭 SSL 证书的验证。 SSL 仍将被使用(除非 use_ssl 为 False),但 SSL 证书将不会被验证。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html


11
投票

我找到了方法,

is_secure=False
中使用了
connect_s3()


6
投票

添加验证=False

boto3.resource(
            "s3",
            endpoint_url=<URL>,
            aws_access_key_id=<ID>,
            aws_secret_access_key=<Key>,
            verify=False
        )

3
投票

我也遇到这个问题了。我的环境是Ubuntu 15.04,Python 2.7.9和Boto 2.38.0。

设置参数 validate_certs=False 不会使其在没有有效证书的情况下使用 HTTPS 连接。阅读boto的代码后,我发现这是Python的ssl模块的行为。然后我在这里找到了解决方案:“SSL:CERTIFICATE_VERIFY_FAILED”错误。并且该解决方案确实有效!!!.


1
投票

macOS 用户:如果您使用的是 python.org 中的 Python 3.6 本页链接的二进制安装程序,请仔细阅读 安装过程中显示的重要信息;此信息 安装后也可以通过单击 /应用程序/Python 3.6/ReadMe.rtf。有重要信息 3.6.0 安装程序提供的 Python 发生了一些变化, 特别是在 SSL 证书验证方面。

https://www.python.org/downloads/release/python-360/

撰写本文时的 ReadMe.rtf:

证书验证和OpenSSL

Python 3.6 的这个变体现在包含其自己的 OpenSSL 1.0.2 私有副本。与以前的版本不同,已弃用的 Apple 提供的 OpenSSL 库不再使用。这也意味着 系统和用户钥匙串中的信任证书由 钥匙串访问应用程序和安全命令行实用程序 Python ssl 模块不再将其用作默认值。对于 3.6.0, 示例命令脚本包含在 /Applications/Python 3.6 中 从以下位置安装精选的默认根证书包 第三方证书包(https://pypi.python.org/pypi/certifi)。 如果您选择使用 certifi,您应该考虑订阅 证书更新时项目的电子邮件更新服务会收到通知 捆绑包已更新。

Python 3.6 安装程序附带的捆绑 pip 有其自己的 用于验证下载连接的默认证书存储。


1
投票

办公室笔记本电脑通常安装有网络监视器。发现是网络监控软件干扰了python,不让它验证aws的ssl证书。我们必须将其证书(从办公室获取)导入到 python 的

cacert.pem
文件中,然后它就开始正常工作了。


0
投票

对我有用的是将以下库添加到我的 python 项目中:

pip 系统证书 python-certifi-win32

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.