2016-02-15 20 views
22

sto facendo la seguente chiamata a branch.ioSSLError: SSLv3 mancato avviso stretta di mano

import requests 
req = requests.get('https://bnc.lt/m/H3XKyKB3Tq', verify=False) 

Funziona bene nella mia macchina locale ma fallisce nel server.

versioni
SSLError: [Errno 1] _ssl.c:504: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure 

OpenSSL:

locale: OpenSSL 0.9.8zg 14 luglio 2015

server: OpenSSL 0.9.8e FIPS-RHEL5 1 Luglio 2008

Python:

locale: 2.7.10 server: 2.7.6

connessione al server Branch io:

Chrome verificato che DigiCert SHA2 Secure Server CA emesso il certificato di questo sito. Il server non ha fornito informazioni sulla trasparenza del certificato.

Ho provato urllib2, ma il risultato è stato lo stesso. Qualsiasi aiuto?

+0

È necessario OpenSSL 0.9.8o almeno per gestire i certificati sha256 in modo che la versione del server sia troppo vecchia. –

+0

Ho provato su OpenSSL 1.0.1e-fips 11 febbraio 2013. Mi ha dato lo stesso errore. –

+0

E il tuo PHP usa quella versione di OpenSSL? Vedi qui per i dettagli su come controllare: http://stackoverflow.com/questions/18752409/updating-openssl-in-python-2-7 –

risposta

31

Jyo de Lys ha identificato il problema. Il problema è descritto here e la soluzione è here. Ho fatto quanto segue per ottenere questo lavoro:

  1. easy_install pyOpenSSL
  2. easy_install NDG-httpsclient
  3. easy_install pyasn1

Se stai ricevendo questo errore durante l'uso urllib2, avrete bisogno per l'aggiornamento a Python 2.7.9 o versioni successive.

+0

Avevo bisogno di: pip install pyasn1 e, per rimuovere alcuni "controllo subjectAltName per SSL peer, la verifica sarà disabilitata", ma altrimenti andrà in crash e mi ha risparmiato molto headscratching. –

+0

Grazie, mi mancava ndg-httpsclient! –

+4

Hmmm, non ha risolto il problema per me. – Peter