2015-12-14 26 views
16

Supporto un sito .NET che (tra molti, MOLTI, altre cose) parla con API remote dai sistemi dei fornitori.Come testare quale versione di TLS mio client .Net utilizza

Vogliamo aggiornare per supportare TLS 1.2 Speriamo di fare così come da questa domanda: Are there .NET implementation of TLS 1.2?

Ma come faccio a verificare che questo sia in realtà di lavoro, una volta che ho fatto la modifica.

Idealmente uno dei siti dei miei fornitori inizierebbe a utilizzare TLS 1.2 SOLO e quindi il mio test potrebbe essere solo "possiamo parlare con quel fornitore ora?" Ma non abbiamo questo. Immagino di poter fare qualcosa con uno sniffer di pacchetti di qualche tipo, ma non saprei esattamente cosa stavo cercando esattamente, né come impostare lo sniffer per raccogliere i dati necessari in modo leggibile.

O:

  • Qualcuno mi può puntare nella direzione di una guida completa per come raccogliere i dati in Fiddler/WireShark

O

  • Qualcuno può consigliare un modo alternativo per testare che il cambiamento ha funzionato.

risposta

7

Se si acquisisce la creazione della connessione in Wireshark ed è necessario esaminare il primo pacchetto dal client, Wireshark annota i campi nella struttura ClientHello, inclusa la versione TLS richiesta dal client.

Analogamente, se si guarda il primo pacchetto di risposta dal server, Wireshark annota i campi nella struttura ServerHello per l'utente, inclusa la versione TLS impostata per la connessione.

Vedere this blog post o this one per esempi lavorati.

+0

Grazie, questo era in definitiva il modo più rapido per ottenere la conferma di cui avevo bisogno. – Brondahl

6

La traccia System.Net include dettagli sufficienti per verificarlo, sebbene non sia molto accessibile.

This KB describes how to turn on System.Net tracing.

This blog post shows a full HTTPS request in System.Net tracing.

I byte inviati in rete vengono registrati, e nell'esempio dato su quel post sul blog, il flusso cliente inizia:

System.Net.Sockets Verbose: 0 : [3848] Data from Socket#48285313::Send 
System.Net.Sockets Verbose: 0 : [3848] 00000000 : 16 03 00 00 41 01 00 00-3D 03 00 43 26 02 90 83 : ....A...=..C&... 

RFC5246 descrive TLS 1.2 e explains that ClientHello is the first message expected and states its format:

struct { 
     ProtocolVersion client_version; 
     Random random; 
     SessionID session_id; 
     CipherSuite cipher_suites<2..2^16-2>; 
     CompressionMethod compression_methods<1..2^8-1>; 
     select (extensions_present) { 
      case false: 
       struct {}; 
      case true: 
       Extension extensions<0..2^16-1>; 
     }; 
    } ClientHello; 

This SO answer explains che il record inizia con 0x16 come un tipo marker, quindi la versione del protocollo.

La sessione sopra indicata ha la versione 3.0, which means SSL 3.0.

The RFC explains che 3.3 è TLS 1.2.

Quindi, se i dati del cliente iniziano "16 03 03", il client sta tentando di negoziare TLS 1.2.

Potrebbe essere necessario esaminare ServerHello per stabilire quale versione è stata effettivamente utilizzata.

8

Se si attiva "CONNETTE" in Fiddler, si può vedere la versione/SSL TLS in ispettori -> TextView

Screen Capture of TLS Version 1.2 Connect to Google.com

Per accendere Collega, andare al Rules nella barra dei menu e rimuovere la spunta da "Nascondi collega"

riferimento: Viewing HTTPS Handshakes in Fiddler