Non conosco un parametro della riga di comando facile da usare, ma nella openssl s_client
riga di comando puoi aggiungere l' -msg
opzione per ottenere un dump esadecimale del messaggio di handshake. Quindi cerca il ServerKeyExchange
messaggio; Dovrebbe sembrare come questo:
<<< TLS 1.2 Handshake [length 030f], ServerKeyExchange
0c 00 03 0b 01 00 ff ff ff ff ff ff ff ff c9 0f
da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02
4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a
(...)
e si legge in questo modo:
0c 00 03 0b
: messaggio di tipo "ServerKeyExchange" (ovvero "0c") di lunghezza 0x00030B byte.
- Il primo elemento è il modulo DH come un intero grande, con un'intestazione di lunghezza di due byte. Qui, la lunghezza è codificata come
01 00
, il che significa un numero intero codificato su 0x0100 byte. Sono 256 byte, quindi il modulo ha una lunghezza compresa tra 2041 e 2048 bit.
- Seguono i byte del modulo, in ordine big-endian senza segno. I byte principali di quel modulo sono, in questo caso
ff ff ff ff...
,. Il modulo ha quindi lunghezza esattamente 2048 bit.
Se usi una suite di cifratura ECDHE (curva ellittica), ServerKeyExchange
ovviamente il formato è diverso.
Vedi lo standard per la definizione del ServerKeyExchange
messaggio. Per le suite di crittografia DHE, contiene il modulo p , generatore g e chiave pubblica DH del server y , in quell'ordine, ciascuno espresso come un intero grande nel formato sopra descritto (intestazione a 16 bit che contiene la lunghezza in byte, quindi l'intero valore nella codifica big-endian senza segno).
Le versioni OpenSSL recenti tendono a selezionare una dimensione del modulo DH che corrisponde (dal punto di vista della sicurezza) alla forza della coppia di chiavi del server (utilizzata per firmare il ServerKeyExchange
messaggio). Nell'esempio sopra, il server ha una chiave RSA a 2048 bit, quindi OpenSSL ha scelto di utilizzare un modulo DH a 2048 bit (in questo caso, il noto modulo descritto in RFC 3526, sezione 3 ).
Alcuni altri server si attaccano a gruppi DH a 1024 bit per garantire la compatibilità con alcuni client esistenti che non supportano gruppi DH più grandi (il principale offensore è l'implementazione SSL in Java, risolta in Java 8 build 56 nel 2012). Un difetto noto nel protocollo TLS, per le suite di crittografia DHE, è che il client non ha modo di specificare quale dimensione del modulo può supportare (questo problema è stato risolto per ECDHE, poiché il client può specificare l'elenco esatto delle curve che accetta) .
s_client
visualizza sempre "Chiave del server temporaneo" DH & size o ECDH & curve quando applicabile, appena prima di "handshake ha letto x e scritto y", quindi non è più necessario per decodificarlo. È recente Apache mod_ssl che seleziona automaticamente DHE: httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile (che rileva il problema relativo ai client Java).