Errore SSL3 quando si richiede la connessione utilizzando TLS 1.2

15

Ho incontrato diversi host che generano errori di handshake SSL3 anche se richiedo esplicitamente TLS 1.2. Perchè è questo? Sto usando il client openssl sbagliato?

$ openssl s_client -tls1_2 -connect i-d-images.vice.com:443
CONNECTED(00000003)
140735150146384:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1472:SSL alert number 40
140735150146384:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:656:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1444078671
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
    
posta richid 05.10.2015 - 23:12
fonte

2 risposte

31

In SSL / TLS, il client non richiede una versione specifica del protocollo; il client annuncia la versione massima del protocollo che supporta, quindi il server sceglie la versione del protocollo che verrà utilizzata. Il tuo cliente non dice "usiamo TLS 1.2"; dice "Conosco fino a TLS 1.2".

Un cliente può avere i propri requisiti aggiuntivi, ma non c'è spazio per indicarli nel messaggio ClientHello . Se il client vuole solo TLS 1.2, deve annunciare "fino a TLS 1.2" nel suo ClientHello , e anche chiudere la connessione se il server risponde con un messaggio che dice nient'altro che "Facciamo TLS 1.2". Nel tuo caso, le cose non sono nemmeno arrivate a quel punto: il server ha risposto con un avviso fatale 40 ("handshake_failure", vedi lo standard ). Come sottolinea @ dave_thompson_085, ciò è dovuto alla mancanza di SNI : si tratta di un'estensione con cui il cliente documenta ClientHello messaggio il nome del server di destinazione. SNI è necessario per alcuni server poiché ospitano diversi siti abilitati per SSL sullo stesso indirizzo IP e hanno bisogno di tale parametro per sapere quale certificato devono utilizzare. Lo strumento da riga di comando openssl s_client può inviare un SNI con un'opzione esplicita -servername .

Come spiegato da @Steffen, SSL 3.0 e tutte le versioni TLS sono abbastanza simili e usano lo stesso formato di registrazione (almeno nella fase iniziale dell'handshake), quindi OpenSSL tende a riutilizzare le stesse funzioni. Nota che poiché il server non risponde affatto con una ServerHello , la versione del protocollo non è ancora stata scelta, e SSL 3.0 è ancora, almeno concettualmente, una possibilità in quel punto iniziale dell'handshake.

    
risposta data 06.10.2015 - 14:11
fonte
6

ssl3_read_bytes e ssl3_writes_bytes si occupano di frame con stile SSL3. Questi sono gli stessi con le versioni successive, cioè TLS1.x. Così si usano le stesse funzioni, anche se i loro nomi potrebbero suggerire una cosa diversa. Non esiste una specifica funzione tls1_read_bytes o simile.

    
risposta data 05.10.2015 - 23:31
fonte

Leggi altre domande sui tag