Sto provando a utilizzare HTTPSConnection di httplib per la convalida del client, utilizzando un certificato PKCS # 12. So che il certificato è buono, in quanto posso connettermi al server che lo utilizza in MSIE e Firefox.Errore nell'utilizzo di HTTPSConnection di httlib con certificato PKCS # 12
Ecco la mia funzione di connessione (il certificato include la chiave privata). Ho Pared verso il basso per solo le basi:
def connect(self, cert_file, host, usrname, passwd):
self.cert_file = cert_file
self.host = host
self.conn = httplib.HTTPSConnection(host=self.host, port=self.port, key_file=cert_file, cert_file=cert_file)
self.conn.putrequest('GET', 'pathnet/,DanaInfo=200.222.1.1+')
self.conn.endheaders()
retCreateCon = self.conn.getresponse()
if is_verbose:
print "Create HTTPS connection, " + retCreateCon.read()
(Nota: Non ci sono commenti sul percorso hard-coded, si prega - Sto cercando di arrivare a questo lavoro prima, ce la farò abbastanza tardi Il percorso hard-coded è corretto, come mi collego ad esso in MSIE e Firefox.Ho cambiato l'indirizzo IP per il post.)
Quando provo a eseguire questo utilizzando un certificato PKCS # 12 (un file .pfx), Torno a quello che sembra essere un errore openSSL. Ecco l'intera traceback errore:
File "Usinghttplib_Test.py", line 175, in t.connect(cert_file=opts["-keys"], host=host_name, usrname=opts["-username"], passwd=opts["-password"]) File "Usinghttplib_Test.py", line 40, in connect self.conn.endheaders() File "c:\python26\lib\httplib.py", line 904, in endheaders self._send_output() File "c:\python26\lib\httplib.py", line 776, in _send_output self.send(msg) File "c:\python26\lib\httplib.py", line 735, in send self.connect() File "c:\python26\lib\httplib.py", line 1112, in connect self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) File "c:\python26\lib\ssl.py", line 350, in wrap_socket suppress_ragged_eofs=suppress_ragged_eofs) File "c:\python26\lib\ssl.py", line 113, in __init__ cert_reqs, ssl_version, ca_certs) ssl.SSLError: [Errno 336265225] _ssl.c:337: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib
Avviso, l'errore openSSL (l'ultima voce della lista) nota "PEM lib", che ho trovato strano, dal momento che non sto cercando di utilizzare un certificato PEM.
Per i calci, ho convertito il certificato PKCS # 12 in un certificato PEM e ho eseguito lo stesso codice utilizzando che. In tal caso, non ho ricevuto errori, mi è stato richiesto di inserire la pass phrase PEM e il codice ha tentato di raggiungere il server. (Ho ricevuto la risposta "Il servizio non è disponibile. Riprova più tardi.", Ma credo che sarebbe perché il server non accetta il certificato PEM. Non riesco a connettermi in Firefox al server usando il certificato PEM entrambi.)
httplib's HTTPSConnection suppone supportare i certificati PCKS # 12? (Ovvero, file pfx.) Se è così, perché sembra che openSSL stia cercando di caricarlo all'interno della lib di PEM? Sto sbagliando tutto questo?
Qualsiasi consiglio è benvenuto.
MODIFICA: il file del certificato contiene sia il certificato sia la chiave privata, motivo per cui sto fornendo lo stesso nome file per i parametri key_file e cert_file di HTTPSConnection.
+1 per RTFM. Dove eri l'anno scorso quando stavo lavorando a questo? :) –
Ciao Remi, ero un po 'lento dal punto di vista ;-) - Sono abbastanza nuovo per SO. Ho appena trovato il tuo post cercando su una stringa di errore simile. Si scopre che ho appena smantellato l'ordine degli argomenti da qualche parte lungo la catena di chiamate e non ho mai passato il percorso chiave in httplib. – Blairo