2013-09-25 46 views
13

Tôi đang duy trì một ứng dụng nhỏ Python sử dụng các yêu cầu + HTTPS.Yêu cầu Python "chứng chỉ xác minh không thành công"

Ứng dụng hoạt động cho đến khi địa chỉ IP của tên máy chủ trong URL HTTPS thay đổi (hợp pháp). Nếu tôi trỏ trình duyệt của mình đến URL, tôi có thể truy xuất nó.

Trường hợp nào Python/yêu cầu giữ tương tự với known_hosts của ssh và làm thế nào để xóa nó cho máy chủ lưu trữ này?

$ python --version 
Python 2.7.3 

$ cat foo.py 
import requests 
url = "https://somehost/resource.json" 
requests.get(url, timeout=5, config={'danger_mode': True}) 

$ source venv/bin/activate 
$ python foo.py 
Traceback (most recent call last): 
    File "foo.py", line 3, in <module> 
    requests.get(url, timeout=5, config={'danger_mode': True}) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 65, in get 
return request('get', url, **kwargs) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/safe_mode.py", line 39, in wrapped 
return function(method, url, **kwargs) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 51, in request 
return session.request(method=method, url=url, **kwargs) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 241, in request 
r.send(prefetch=prefetch) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/models.py", line 641, in send 
raise SSLError(e) 
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL  routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
+5

Tôi không chắc chắn lý do tại sao chứng chỉ không hợp lệ, nhưng như một giải pháp thay thế bạn có thể sử dụng 'requests.get (url, timeout = 5, config = {'danger_mode': True}, verify = False)' bỏ qua chứng chỉ SSL như được đề cập trong [Tài liệu sử dụng nâng cao yêu cầu] (http://www.python-requests.org/en/latest/user/advanced/). –

+1

@ AndréDaniel có 'cấu hình' đã bị xóa? Tôi không nhìn thấy nó trên trang liên kết và trăn của tôi tuyên bố nó là không rõ. Và 'verify = False' một mình dường như không làm các trick ... – codeling

+0

@RandolphCarter Tôi chỉ cần nhìn vào trang và nó vẫn còn đó, tìm kiếm" SSL Cert "(Tôi rất muốn cung cấp cho bạn một liên kết trực tiếp nhưng Tôi đang ở trên điện thoại của mình và không thể thực sự làm như vậy) ... –

Trả lời

4

Bạn đang sử dụng phiên bản yêu cầu cũ. Bạn sẽ nhận được thông báo hữu ích hơn nếu nâng cấp lên 2.0 và nếu trang web của bạn có chứng chỉ không phù hợp, bạn có thể khắc phục bằng cách chỉ định chứng chỉ hệ thống sẽ có thể xác minh chứng chỉ trung gian. Bạn cũng có thể chỉ yêu cầu không xác minh chứng chỉ của mình như Andre đề xuất.

+1

Hóa ra là trong quá trình nâng cấp máy chủ chưa được ký hoặc chứng chỉ đã ký không chính xác đã được cài đặt. HTTPS trong trình duyệt hoạt động từ máy Windows vì sự khác biệt giữa chứng chỉ gốc giữa hai hệ điều hành. Thay đổi IP ít liên quan đến nó (ngoại trừ những điều gây nhầm lẫn). –

1

Hóa ra là trong quá trình nâng cấp máy chủ được đề cập trong câu hỏi, chứng chỉ đã ký không chính xác đã được cài đặt. HTTPS trong trình duyệt hoạt động vì sự khác biệt giữa chứng chỉ gốc giữa máy trình duyệt Windows và trình khách Ubuntu Python. HTTPS thông qua trình duyệt từ cùng một máy tính Ubuntu mà Python được chạy tiết lộ chi tiết vấn đề về chứng chỉ.

Thay đổi IP ít liên quan đến vấn đề này, ngoại trừ những điều gây nhầm lẫn.

Thúc đẩy nhận xét của tôi đến một câu trả lời như sau:

  1. này đã trả lời câu hỏi của tôi
  2. câu hỏi này là nhận được đủ giao thông Tôi muốn chia sẻ kiến ​​thức.
Các vấn đề liên quan