2016-04-22 4 views
0

Wir möchten eine SSL-Verbindung mit einem Dienstanbieter herstellen, der ein Zertifikat UND ein Kennwort benötigt. Dies scheint bei Curl einfach zu sein (siehe unten), da es einen SSLCERTPASSWD-Parameter gibt (siehe unten). Aber wir möchten die Verbindung mit Python und seiner ssl-Bibliothek herstellen, wobei das einzige verfügbare Argument ca_cert ist (bezieht sich auf die Zertifikatsdatei). Kennt jemand einen Weg, um diese Beschränkung auf Python 2.7 zu überwinden?SSL-Verbindung, die ein Passwort in Python erfordert 2.7

Hier ist der Curl

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSLCERT, $cert); 
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'asdf'); 
// curl_setopt($ch, CURLOPT_SSLVERSION, 5); // let server decide 
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // this stops the data returning 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
if($result = curl_exec($ch) === false) { 
    die('Curl error: ' . curl_error($ch)); 
} 

Vielen Dank im Voraus

+0

Verwenden Sie [pycurl] (https://pypi.python.org/pypi/pycurl) eine Option für Sie? – salomonderossi

+0

Ich habe versucht, dies zu vermeiden, aber es scheint der beste Weg nach vorne zu sein. Danke vielmals! – Shant

Antwort

0

Wenn pycurl eine Option. Etwas, das dir helfen könnte

import pycurl 
import StringIO 

b = StringIO.StringIO() 
c = pycurl.Curl() 
url = "https://example.com" 
c.setopt(pycurl.URL, url) 
c.setopt(pycurl.WRITEFUNCTION, b.write) 
c.setopt(pycurl.CAINFO, "/path/cacert.pem") 
c.setopt(pycurl.SSLKEY, "/path/key_file.pem") 
c.setopt(pycurl.SSLCERT, "/path/cert_file.pem") 
c.setopt(pycurl.SSLKEYPASSWD, "your pass phrase") 
c.perform() 
c.close() 
result = b.getvalue()