Saya tidak tahu tentang saklar baris perintah yang mudah digunakan, tetapi di openssl s_client
baris perintah, Anda dapat menambahkan -msg
opsi untuk mendapatkan dump heksadesimal dari pesan jabat tangan. Kemudian cari ServerKeyExchange
pesannya; seharusnya terlihat seperti ini:
<<< 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
(...)
dan bunyinya seperti itu:
0c 00 03 0b
: pesan tipe "ServerKeyExchange" (itulah "0c") dengan panjang 0x00030B byte.
- Elemen pertama adalah modulus DH sebagai bilangan bulat besar, dengan header panjang dua byte. Di sini, panjangnya disandikan sebagai
01 00
, artinya bilangan bulat disandikan lebih dari 0x0100 byte. Itu 256 byte, sehingga modulus memiliki panjang antara 2041 dan 2048 bit.
- Bytes modulus mengikuti, dalam urutan big-endian yang tidak ditandatangani. Bytes teratas dari modulus itu adalah, dalam hal ini
ff ff ff ff...
,. Modulusnya kemudian memiliki panjang persis 2048 bit.
Jika Anda menggunakan paket sandi ECDHE (kurva eliptik), ServerKeyExchange
tentu saja formatnya berbeda.
Lihat standar untuk definisi ServerKeyExchange
pesan. Untuk suite cipher DHE, ini berisi modulus p , generator g dan server DH kunci publik y , dalam urutan itu, masing-masing dinyatakan sebagai bilangan bulat besar dalam format yang dijelaskan di atas (header 16-bit yang berisi panjang dalam byte, kemudian bilangan bulat nilai dalam pengkodean big-endian yang tidak ditandatangani).
Versi OpenSSL baru-baru ini cenderung untuk memilih ukuran DH modulus yang pertandingan (dari sudut pandang keamanan) kekuatan pasangan kunci server (digunakan untuk menandatangani dengan ServerKeyExchange
pesan). Dalam contoh di atas, server memiliki kunci RSA 2048-bit, sehingga OpenSSL memilih untuk menggunakan modulus DH 2048-bit (dalam hal ini, modulus terkenal yang dijelaskan dalam RFC 3526, bagian 3 ).
Beberapa server lain tetap menggunakan grup DH 1024-bit untuk memastikan kompatibilitas dengan beberapa klien yang sudah ada yang tidak mendukung grup DH yang lebih besar (pelaku terbesar adalah implementasi SSL di Jawa, diperbaiki di Java 8 build 56 pada 2012). Kelemahan yang diketahui dalam protokol TLS, untuk suite cipher DHE, adalah bahwa klien tidak memiliki cara untuk menentukan ukuran modulus apa yang mungkin didukung (ini diperbaiki untuk ECDHE, karena klien dapat menentukan daftar kurva yang tepat yang diterimanya) .
s_client
selalu menampilkan "Temp server key" DH & ukuran atau ECDH & kurva jika berlaku, tepat sebelum "jabat tangan telah membaca x dan ditulis y", sehingga Anda tidak lagi memerlukan untuk memecahkan kode itu. Apache mod_ssl baru-baru ini yang memilih DHE secara otomatis: httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile (yang mencatat masalah tentang klien Java).