Python Boto[SSL:CERTIFICATE\u VERIFY\u FAILED]连接到S3时证书验证失败
我试图使用boto连接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
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
)