2015-01-23 19 views
8

Tôi đang cố gắng kết nối với S3 bằng boto, nhưng có vẻ như không thành công. Tôi đã thử một số cách giải quyết, nhưng chúng dường như không hoạt động. Có ai co thể giúp tôi với điều này không. Dưới đây là mã.Boto [SSL: CERTIFICATE_VERIFY_FAILED] chứng chỉ xác thực không thành công khi kết nối với 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) 

Trả lời

9

Tôi tìm thấy một cách,

sử dụng is_secure=False trong connect_s3().

+0

Điều này phục vụ như một giải pháp thay vì vấn đề thực sự là amazon sử dụng các chứng chỉ không hợp lệ cho tên miền phụ. – WhyNotHugo

+0

Cảm ơn @Siddarth: có nhiều giải pháp không hoạt động, ngoài kia. Tôi sẽ thêm rằng 'validate_certs = False' không làm bất cứ điều gì (hành vi của nó không được ghi lại, như hành vi' is_secure': http://boto.readthedocs.org/en/latest/ref/s3.html#boto .s3.connection.S3Connection). – EOL

+1

Có @EOL Tôi đã phải trải qua mọi giải pháp không làm việc trước khi tôi kết thúc bằng một giải pháp phù hợp. Đã thất vọng. – Siddarth

9

Có thể tên nhóm của bạn chứa dấu chấm, đó là lý do tại sao xác minh chứng chỉ ssl không thành công. Đây là một vấn đề khá thường xuyên, xem ví dụ này github issue.

Không sử dụng một kết nối an toàn (is_secure=False), thay vì sử dụng OrdinaryCallingFormat:

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

Bạn có thể cần phải cập nhật của bạn AWS Region, ví dụ us-east-1

0

Tôi cũng gặp sự cố này. Môi trường của tôi là Ubuntu 15.04, Python 2.7.9 và Boto 2.38.0.

Đặt đối số validate_certs = False không hoạt động với kết nối HTTPS mà không có chứng chỉ hợp lệ. Sau khi đọc mã boto, tôi thấy rằng đó là một hành vi của các mô-đun ssl của Python. Sau đó, tôi tìm thấy một giải pháp ở đây: "SSL: CERTIFICATE_VERIFY_FAILED" Error. Và giải pháp không hoạt động !!!.

0

người dùng hệ điều hành MacOS: Nếu bạn đang sử dụng Python 3.6 từ trình cài đặt nhị phân python.org liên kết trên trang này, xin vui lòng đọc kỹ các thông tin quan trọng hiển thị trong khi cài đặt; thông tin này cũng có sẵn sau khi cài đặt bằng cách nhấp vào /Applications/Python 3.6/ReadMe.rtf. Có thông tin quan trọng có những thay đổi trong trình cài đặt do Python cung cấp 3.6.0, đặc biệt liên quan đến xác thực chứng chỉ SSL.

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

Từ ReadMe.rtf tại thời điểm viết bài này: xác minh Giấy chứng nhận

và OpenSSL

MỚI Phiên bản này của Python 3.6 hiện nay bao gồm bản sao riêng của OpenSSL 1.0.2. Không giống như các bản phát hành trước đó, các thư viện OpenSSL do Apple cung cấp không còn được sử dụng nữa . Điều này cũng có nghĩa là rằng chứng chỉ tin cậy trong móc khóa hệ thống và khóa người dùng được quản lý bởi ứng dụng Truy cập Keychain và tiện ích dòng lệnh bảo mật không còn được sử dụng làm mặc định bởi mô-đun ssl Python nữa. Đối với 3.6.0, một tập lệnh lệnh mẫu được bao gồm trong/Applications/Python 3.6 đến cài đặt một gói các chứng chỉ gốc mặc định được sắp xếp từ gói chứng nhận của bên thứ ba của bên thứ ba (https://pypi.python.org/pypi/certifi). Nếu bạn chọn sử dụng certifi, bạn nên cân nhắc đăng ký dịch vụ cập nhật email của dự án để được thông báo khi gói chứng chỉ được cập nhật.

pip đi kèm đi kèm với trình cài đặt Python 3.6 có kho lưu trữ chứng chỉ mặc định của riêng mình để xác minh kết nối tải xuống.

Các vấn đề liên quan