2013-07-10 28 views
9

Python istemleriyle bir REST API çağrısı yapıyorum ve şu ana kadar verify=False ayarlandığında başarılı oldum.Python İstekleri - İstemci tarafı sertifikası için SSL hatası

Şimdi, kimlik doğrulaması için almam gereken istemci tarafı sertifikasını kullanmalıyım ve bu hatayı alıyorum her zaman kullanıyorum cert (.pfx). cert.pfx parola korumalı.

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) 

Ben de openssl .pem ve anahtar olsun ama .pem ile ve SSL: CERTIFICATE_VERIFY_FAILED

birisi beni yönlendirmek misiniz alma denedim:

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

Bu

alıyorum hatadır Sertifikaları nasıl ithal edersiniz? Aramayı denedim ama yine de aynı sorunla karşı karşıya kaldım.

cevap

21

Aynı sorun vardı. verify parametresinin sunucunun sertifikasına başvurduğu görünüyor. İstemci sertifikanızı belirtmek için cert parametresini istiyorsunuz.

Sertifika PEM dosyası ve anahtar PEM dosyası almak için dönüştürmek üzere OpenSSL kullanmak zorunda kaldım.

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) 

Hala İstekler bazı SSL sunucuları ile güzel oynamıyor ile ilgili sorunlar vardı, ama verify/cert ayrım senin sorunun olabileceğini düşünüyorum.

+3

Çok teşekkür ederim. Üzgünüm, daha önce yanıt vermedi, ama bu sorunu düzeltmek için görünüyordu! Cevabınızı takdir edin. – onlyme

+0

Sertifika ve anahtarı .pfx'ten nasıl çıkardınız? – andrei