2015-12-09 9 views
7

Si tratta di un problema in cui python non può connettersi a un server specifico su ssl a causa di openssl che non è in grado di completare l'handshake. Curl e il mio browser funzionano. Ho provato un paio di versioni di openssl diverse e solutions, ma non riesco a connettermi.Errore di connessione OpenSSL SSL23_GET_SERVER_HELLO, ma browser e arricciatura funziona

Ecco cosa ho provato su entrambe le seguenti piattaforme. L'output è stampato leggermente diverso su OpenSSL 1.0.1e, ma è sempre lo stesso errore.

Mac OSX Yosemite - OpenSSL 0.9.8zg 14 July 2015 
Debian GNU/Linux 7 (wheezy) - OpenSSL 1.0.1e 11 Feb 2013 

senza specificare quale versione di

openssl s_client -connect www.uk-recruitment.net:443 
openssl s_client -connect www.uk-recruitment.net:443 -cipher 'DEFAULT:!ECDH' 
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem 
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH' 
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH' -servername uk-recruitment.net 

ma ho sempre ottenere lo stesso risultato

CONNECTED(00000003) 
66716:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s23_clnt.c:593: 

Se aggiungo -tls1, -tls1_1 o -tls1_2 con tutte le stesse opzioni, ho un errore leggermente diverso:

openssl s_client -connect www.uk-recruitment.net:443 -tls1 
CONNECTED(00000003) 
66750:error:14094438:SSL routines:SSL3_READ_BYTES:tlsv1 alert internal error:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s3_pkt.c:1145:SSL alert number 80 
66750:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s3_pkt.c:566: 
+0

Stack Overflow è un sito per domande di programmazione e sviluppo. Questa domanda sembra essere fuori tema perché non riguarda la programmazione o lo sviluppo. Vedi [Quali argomenti posso chiedere qui] (http://stackoverflow.com/help/on-topic) nel Centro assistenza. Forse [Super User] (http://superuser.com/) o [Information Security Stack Exchange] (http://security.stackexchange.com/) sarebbe un posto migliore dove chiedere. Inoltre [Dove posso pubblicare domande su Dev Ops?] (Http://meta.stackexchange.com/q/134306). – jww

risposta

10

I siti richiedono Server Name Indication (SNI) e strette di mano SSL non si utilizza SNI causerà il fallimento:

$ openssl s_client -connect www.uk-recruitment.net:443 
CONNECTED(00000003) 
139999237719712:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:s23_clnt.c:770: 

Con SNI invece sembra molto meglio:

$ openssl s_client -connect www.uk-recruitment.net:443 -servername www.uk-recruitment.net 
CONNECTED(00000003) 
... 
    Cipher : ECDHE-ECDSA-AES128-GCM-SHA256 

Potrebbe essere che l'opzione -servername non è disponibile con OpenSSL 0.9.8, ma dovrebbe essere con OpenSSL 1.0.1.

+0

Grazie, la bandiera si presenta come disponibile su 0.9.8, ma continua a dare lo stesso errore (sia con prefisso www che non) quindi ho pensato che non fosse la soluzione. Cercando su 1.0.1 funziona. –

+1

Per ssllabs sono su cloudflare e richiedono SNI, TLSv1.0 minimo * e ECDHE-ECDSA keyexchange *, mentre i test mostrano che richiedono anche un "nuovo stile" Hello (non compatibile con SSLv2), che è il valore predefinito per 0.9.8 . 1.0.0 con '-servername' funziona, ma 1.0.1 o 1.0.2 è migliore perché raggiungono TLSv1.2 e GCM. 0.9.8 può funzionare usando '-tls1 -ciphers ECCdraft: HIGH:! ANULL -servername', ma è un po 'complicato. –