Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Boto[SSL:CERTIFICATE\u VERIFY\u FAILED]连接到S3时证书验证失败_Python_Amazon Web Services_Amazon S3_Amazon_Boto - Fatal编程技术网

Python Boto[SSL:CERTIFICATE\u VERIFY\u FAILED]连接到S3时证书验证失败

Python Boto[SSL:CERTIFICATE\u VERIFY\u FAILED]连接到S3时证书验证失败,python,amazon-web-services,amazon-s3,amazon,boto,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', 'aw

我试图使用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)
我找到了一个方法


connect\u s3()
中使用的
是\u secure=False
可能您的存储桶名称包含一个点,这就是ssl证书验证失败的原因。这是一个非常常见的问题,请参见此示例

不要使用不安全的连接(
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)

您可能需要更新您的,例如,
us-east-1

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

设置参数validate\u certs=False不会使其在没有有效证书的HTTPS连接中工作。在阅读了boto的代码之后,我发现这是Python的ssl模块的行为。然后我在这里找到了一个解决方案:。这个解决方案确实有效

macOS用户:如果您正在使用Python.org上的Python3.6 二进制安装程序链接到此页面,请仔细阅读 安装过程中显示的重要信息;此信息 安装后,单击 /Applications/Python 3.6/ReadMe.rtf。这里有重要的信息 关于Python提供的3.6.0安装程序中的更改, 特别是关于SSL证书验证

在撰写本文时从ReadMe.rtf:

证书验证与OpenSSL

新的Python 3.6的这个变体现在包括它自己的OpenSSL 1.0.2的私有副本。与以前的版本不同,该版本已弃用 不再使用苹果提供的OpenSSL库。这也意味着 由管理的系统和用户密钥链中的信任证书 Keychain访问应用程序和安全命令行实用程序 Python ssl模块不再将其用作默认值。对于3.6.0,a 示例命令脚本包含在/Applications/Python 3.6至中 从安装一个经过管理的默认根证书捆绑包 第三方certifi软件包()。 如果选择使用证书,则应该考虑订阅 项目的电子邮件更新服务将在证书更新时得到通知 包已更新

Python3.6安装程序附带的捆绑pip有自己的功能 用于验证下载连接的默认证书存储


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

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

添加验证=错误

boto3.resource(
            "s3",
            endpoint_url=<URL>,
            aws_access_key_id=<ID>,
            aws_secret_access_key=<Key>,
            verify=False
        )
boto3.resource(
“s3”,
端点url=,
aws\u访问\u密钥\u id=,
aws_secret_access_key=,
验证=错误
)

这是一个解决办法,但真正的问题是亚马逊对子域使用无效的证书。谢谢@Siddarth:有很多不起作用的解决方案。我想补充一点,
validate\u certs=False
没有任何作用(它的行为没有任何文档记录,比如
is\u secure
的行为:)。是的@EOL我必须检查所有不起作用的解决方案,然后才能找到正确的解决方案。失败。此解决方案不安全,仅当另一端的证书无效且对此无法采取任何措施时才应使用。这对于将boto3与docker(自签名证书)一起使用非常有用
boto3.resource(
            "s3",
            endpoint_url=<URL>,
            aws_access_key_id=<ID>,
            aws_secret_access_key=<Key>,
            verify=False
        )