2015-02-23 22 views
9

Cố gắng thực hiện yêu cầu nhận đơn giản bằng cách sử dụng phiên Yêu cầu nhưng tôi tiếp tục nhận SSLerror cho một trang web cụ thể. Tôi nghĩ rằng có lẽ vấn đề là với trang web (tôi đã thực hiện quét bằng cách sử dụng https://www.ssllabs.com, kết quả là xuống dưới), nhưng tôi không thể chắc chắn vì tôi không có kiến ​​thức trong lĩnh vực này :) Tôi chắc chắn muốn hiểu những gì đang xảy ra.Yêu cầu Python nhận SSLerror

Giải pháp/giải thích sẽ tuyệt vời, cảm ơn!

Mã:

import requests 

requests.get('https://www.reporo.com/') 

Tôi nhận được lỗi sau:

SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')] 

--------------------------------------------------------------------------- 
SSLError         Traceback (most recent call last) 
<ipython-input-7-cfc21b287fee> in <module>() 
----> 1 requests.get('https://www.reporo.com/') 

/usr/local/lib/python2.7/dist-packages/requests/api.pyc in get(url, **kwargs) 
    63 
    64  kwargs.setdefault('allow_redirects', True) 
---> 65  return request('get', url, **kwargs) 
    66 
    67 

/usr/local/lib/python2.7/dist-packages/requests/api.pyc in request(method, url, **kwargs) 
    47 
    48  session = sessions.Session() 
---> 49  response = session.request(method=method, url=url, **kwargs) 
    50  # By explicitly closing the session, we avoid leaving sockets open which 
    51  # can trigger a ResourceWarning in some cases, and look like a memory leak 

/usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 
    459   } 
    460   send_kwargs.update(settings) 
--> 461   resp = self.send(prep, **send_kwargs) 
    462 
    463   return resp 

/usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in send(self, request, **kwargs) 
    571 
    572   # Send the request 
--> 573   r = adapter.send(request, **kwargs) 
    574 
    575   # Total elapsed time of the request (approximately) 

/usr/local/lib/python2.7/dist-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies) 
    429   except (_SSLError, _HTTPError) as e: 
    430    if isinstance(e, _SSLError): 
--> 431     raise SSLError(e, request=request) 
    432    elif isinstance(e, ReadTimeoutError): 
    433     raise ReadTimeout(e, request=request) 

SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')] 

Tôi chạy một quét tại https://www.ssllabs.com và đã nhận như sau:

SSL Report: reporo.com 
Assessed on: Sun Feb 22 21:42:57 PST 2015 | Clear cache Scan Another >> 

    Server Domain(s) Test time Grade 
1 154.51.128.13 
Certificate not valid for domain name 
reporo.com 
Sun Feb 22 21:40:53 PST 2015 
Duration: 9.167 sec - 
2 198.12.15.168 
protected.ddosdefend.com 
Ready 
www.reporo.com 

Sun Feb 22 21:41:02 PST 2015 
Duration: 115.189 sec 
F 
+0

Các máy chủ được sử dụng chứng chỉ không hợp lệ, giống như báo cáo nói. Do đó, 'yêu cầu' từ chối kết nối, vì việc chuyển giao thông tin có thể không an toàn. – MattDMo

+0

Tôi có thể sử dụng cách giải quyết khác không? –

Trả lời

17

Giấy chứng nhận bản thân cho www.reporo.com (không phải reporo.com) là hợp lệ, nhưng thiếu chứng chỉ chuỗi như được trình bày trong báo cáo bởi ssllabs:

Chain issues Incomplete 
.... 
2 Extra download Thawte DV SSL CA 
Fingerprint: 3ca958f3e7d6837e1c1acf8b0f6a2e6d487d6762 

"Chưa hoàn tất" và "Tải xuống bổ sung" là những điểm chính. Một số trình duyệt sẽ có chứng chỉ chuỗi bị thiếu trong bộ nhớ cache, những trình duyệt khác sẽ tải xuống và các trình duyệt khác sẽ không thành công. Nếu bạn thử trang web với cấu hình Firefox mới (không có bất kỳ chứng chỉ nào được lưu trong bộ nhớ cache) thì nó cũng sẽ thất bại.

Bạn có thể tải xuống chứng chỉ chuỗi bị thiếu và sử dụng chứng chỉ CA đáng tin cậy với thông số verify cho các yêu cầu. Không chỉ vô hiệu hóa xác nhận bởi vì sau đó bạn đang mở cho các cuộc tấn công man-in-the-middle.

Từng hướng dẫn bước:

+1

Bạn có thể xây dựng cách tải xuống và sử dụng chứng chỉ CA không? (hoặc liên kết về chủ đề) chủ đề là mới đối với tôi và tôi muốn tránh rối tung lên :) –

+1

Tôi đã thêm hướng dẫn từng bước cho câu trả lời. –

+0

Tôi đã thử các giải pháp cho lá thư như xa như tôi thấy, nhưng tôi tiếp tục nhận được SSLError: [Errno xấu bắt tay] [('SSL thói quen', 'SSL3_GET_SERVER_CERTIFICATE', 'chứng nhận xác minh thất bại')]. :/ –

4

Bạn có thể vô hiệu hóa xác minh chứng chỉ:

requests.get('https://www.reporo.com/', verify=False) 

nhưng không xác minh giấy chứng nhận không có bảo vệ man-in-the-middle attack.

+0

cảm ơn nhưng tôi đang cố gắng thực hiện điều đó mà không cần xác minh = False –

+8

Vui lòng không bao giờ đề xuất vô hiệu hóa xác thực mà không chỉ ra các tác động bảo mật. –

2

Tôi đã gặp lỗi tương tự. Hạ cấp yêu cầu từ yêu cầu-2.17.3 đến yêu cầu-2.11.0 đã giải quyết nó cho tôi.

pip uninstall requests 
pip install requests==2.11.0 
1

Ran vào vấn đề tương tự và cố định bằng cách làm theo:

pip install -U requests[security] 
Các vấn đề liên quan