2013-07-10 35 views
9

Tôi đang gọi API REST với các yêu cầu trong python và cho đến nay đã thành công khi tôi đặt verify=False.Yêu cầu Python - Lỗi SSL cho chứng chỉ phía máy khách

Bây giờ, tôi phải sử dụng chứng chỉ phía máy khách mà tôi cần nhập để xác thực và tôi nhận được lỗi này mọi lúc tôi đang sử dụng cert (.pfx). cert.pfx được bảo vệ bằng mật khẩu.

r = requests.post(url, params=payload, headers=headers, 
        data=payload, verify='cert.pfx') 

Đây là lỗi tôi nhận được:

Traceback (most recent call last): 
File "C:\Users\me\Desktop\test.py", line 65, in <module> 
r = requests.post(url, params=payload, headers=headers, data=payload, verify=cafile) 
File "C:\Python33\lib\site-packages\requests\api.py", line 88, in post 
return request('post', url, data=data, **kwargs) 
File "C:\Python33\lib\site-packages\requests\api.py", line 44, in request 
return session.request(method=method, url=url, **kwargs) 
File "C:\Python33\lib\site-packages\requests\sessions.py", line 346, in request 
resp = self.send(prep, **send_kwargs) 
File "C:\Python33\lib\site-packages\requests\sessions.py", line 449, in send 
r = adapter.send(request, **kwargs) 
File "C:\Python33\lib\site-packages\requests\adapters.py", line 322, in send 
raise SSLError(e) 
requests.exceptions.SSLError: unknown error (_ssl.c:2158) 

Tôi cũng đã cố gắng để có được openssl .pem và quan trọng nhưng với .pem và nhận SSL: CERTIFICATE_VERIFY_FAILED

Ai đó có thể vui lòng hướng dẫn tôi trên làm thế nào để nhập khẩu các certs và nơi để đặt nó? Tôi đã thử tìm kiếm nhưng vẫn phải đối mặt với cùng một vấn đề.

Trả lời

21

Tôi gặp vấn đề tương tự. Tham số verify dường như tham chiếu đến chứng chỉ của máy chủ. Bạn muốn tham số cert để chỉ định chứng chỉ ứng dụng khách của bạn.

Tôi đã phải sử dụng OpenSSL để chuyển đổi để nhận tệp PEM chứng chỉ và tệp PEM chính.

import requests 
cert_file_path = "cert.pem" 
key_file_path = "key.pem" 

url = "https://example.com/resource" 
params = {"param_1": "value_1", "param_2": "value_2"} 
cert = (cert_file_path, key_file_path) 
r = requests.get(url, params=params, cert=cert, verify=False) 

tôi vẫn có vấn đề với yêu cầu không chơi độc đáo với một số máy chủ SSL, nhưng tôi nghĩ rằng sự khác biệt verify/cert có thể là vấn đề của bạn.

+3

Cảm ơn bạn rất nhiều. Xin lỗi đã không trả lời trước đó, nhưng điều đó dường như khắc phục vấn đề! Đánh giá cao phản hồi của bạn. – onlyme

+0

làm cách nào bạn trích xuất chứng chỉ và khóa từ tệp .pfx? – andrei

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