Come viene selezionata la versione TLS tra client e server? [duplicare]

0

Abbiamo un problema in cui un'applicazione client che ha abilitato TLS 1.0, 1.1 e 1.2 non può connettersi a un server utilizzando solo TLS 1.0.

Dopo aver disabilitato TLS 1.2 e 1.1 sul client, è possibile effettuare la connessione.

Quindi mi stavo chiedendo; in che modo viene determinata la versione TLS tra client e server?

    
posta oɔɯǝɹ 29.08.2017 - 09:44
fonte

2 risposte

3

Sembra che l'applicazione (lato client) non accetti il fallback della negoziazione della versione durante la creazione della sessione SSL / TLS.

La versione TLS è inizialmente negoziata dal client (messaggio Client Hello) che specifica la versione più alta che supporta tra altri parametri (parametri di cifratura, ecc.). Testo da RFC 5246, TLS v1.2:

client_version: The version of the TLS protocol by which the client wishes to communicate during this session. This SHOULD be the latest (highest valued) version supported by the client. For this version of the specification, the version will be 3.3 (see Appendix E for details about backward compatibility).

Dopo che il server ha ricevuto il client Hello invia il server Hello con la versione SSL / TLS scelta tra gli altri parametri scelti in base alle informazioni di Client Hello. Testo da RFC 5246, TLS v1.2:

server_version: This field will contain the lower of that suggested by the client in the client hello and the highest supported by the server. For this version of the specification, the version is 3.3. (See Appendix E for details about backward compatibility.)

Un riassunto di tutto questo è mostrato nel seguente diagramma:

Direicheilproblemaèchel'applicazioneclientnonaccettailfallbackdeldowngradedellaversioneTLSdurantelanegoziazioneeperquestofunzionaquandodisabilitaTLSv1.1eTLSv1.2.ControllailtestoingrassettonellanuovaRFC5246,AppendiceE:

ATLS1.2clientwhowishestonegotiatewithsucholderserverswillsendanormalTLS1.2ClientHello,containing{3,3}(TLS1.2)in
ClientHello.client_version.Iftheserverdoesnotsupportthis
version,itwillrespondwithaServerHellocontaininganolder
versionnumber.Iftheclientagreestousethisversion,the
negotiationwillproceedasappropriateforthenegotiatedprotocol.

Iftheversionchosenbytheserverisnotsupportedbytheclient(ornotacceptable),theclientMUSTsenda"protocol_version" alert
message and close the connection.

Un approccio semplice per eseguire il debug di questo, potrebbe essere quello di controllare i registri sia del server che dell'applicazione (non hai specificato quali applicazioni stai utilizzando) in modalità dettagliata in modo da poter visualizzare i messaggi di negoziazione. Altri più avanzati potrebbero essere collegare wirehark / tcpdump per controllare i parametri di negoziazione. Questo dovrebbe essere fattibile senza troppi problemi dato che queste informazioni non viaggiano crittografate.

    
risposta data 29.08.2017 - 11:13
fonte
0

La maggior parte dei programmi oggi tenta di utilizzare la versione più alta possibile durante il tentativo di connessione. Se fallisce, ripristina una versione fino a quando non viene trovata una versione supportata all'altra estremità. Se il programma non è abbastanza intelligente da farlo automaticamente, dovrai dirgli manualmente di usare una versione precedente (come hai praticamente fatto nel tuo caso).

    
risposta data 29.08.2017 - 09:51
fonte

Leggi altre domande sui tag