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

时间:2015-01-23 17:18:11

标签: python amazon-web-services amazon-s3 amazon boto

我正在尝试使用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)

6 个答案:

答案 0 :(得分:11)

您的存储桶名称可能包含一个点,这就是ssl证书验证失败的原因。这是一个经常出现的问题,例如,见github issue

请勿使用不安全的连接(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 Region,例如us-east-1

答案 1 :(得分:9)

我找到了办法,

is_secure=False中使用connect_s3()

答案 2 :(得分:2)

add verify = False

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

答案 3 :(得分:1)

在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

答案 4 :(得分:0)

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

设置参数 validate_certs = False 并不能使其与没有有效证书的HTTPS连接一起使用。在阅读了boto的代码后,我发现它是Python的ssl模块的行为。然后我在这里找到了一个解决方案:"SSL: CERTIFICATE_VERIFY_FAILED" Error。解决方案确实有效!!!。

答案 5 :(得分:0)

  

macOS用户:如果您正在使用python.org中的Python 3.6   二进制安装程序链接在此页面上,请仔细阅读   安装期间显示的重要信息;此信息   安装后点击即可使用   / Applications / 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不再使用Apple提供的OpenSSL库。这也意味着   系统和用户密钥链中的信任证书由管理   Keychain Access应用程序和安全命令行实用程序   Python ssl模块不再使用默认值。对于3.6.0,a   示例命令脚本包含在/ Applications / Python 3.6中   从中安装策划的默认根证书包   第三方证书包(https://pypi.python.org/pypi/certifi)。   如果您选择使用certifi,您应该考虑订阅   项目的电子邮件更新服务在证书时通知   捆绑包已更新。

     

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