Я не знаю про простий у використанні комутатор командного рядка, але в openssl s_client
командному рядку ви можете додати -msg
можливість отримати шістнадцятковий дамп повідомлення рукостискання. Потім шукайте ServerKeyExchange
повідомлення; це має виглядати так:
<<< 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
(...)
і він читає так:
0c 00 03 0b
: повідомлення типу "ServerKeyExchange" (це "0c") довжиною 0x00030B байт.
- Перший елемент - це модуль DH як велике ціле число з двобайтовим заголовком довжини. Тут довжина кодується як
01 00
, що означає ціле число, закодоване понад 0x0100 байт. Це 256 байт, тому модуль має довжину між 2041 і 2048 бітами.
- Слідують байти модулів у неподписаному великому порядку. У цьому випадку верхні байти цього модуля
ff ff ff ff...
. Тоді модуль має довжину рівно 2048 біт.
Якщо ви використовуєте шифровий набір ECDHE (еліптична крива), то ServerKeyExchange
формат, звичайно, інший.
Див . Стандарт для визначення ServerKeyExchange
повідомлення. Для DHe шифрів, вона містить модуль р , генератор г і сервер DH відкритий ключ у , в такому порядку, кожен виражається у вигляді великого цілого числа в форматі , описаному вище (16-бітний заголовок , який містить довжину в байтах, то ціле число значення в безпідписаному кодуванні big-endian).
Останні версії OpenSSL мають тенденцію вибрати розмір DH модуль , який відповідає (з точки зору безпеки) сили пари ключів сервера (використовується для підписати на ServerKeyExchange
повідомлення). У наведеному вище прикладі сервер має 2048-розрядний ключ RSA, тому OpenSSL обрав використовувати 2048-бітний модуль DH (у цьому випадку добре відомий модуль, описаний у RFC 3526, розділ 3 ).
Деякі інші сервери дотримуються 1024-розрядних груп DH, щоб забезпечити сумісність з деякими існуючими клієнтами, які не підтримують більші групи DH (найбільшим правопорушником є реалізація SSL в Java, виправлена в Java 8 build 56 у 2012 році). Відомий недолік протоколу TLS для шифрових пакетів DHE полягає в тому, що клієнт не може вказати, який розмір модуля він може підтримувати (це встановлено для ECDHE, оскільки клієнт може вказати точний список кривих, які він приймає) .
s_client
завжди відображає "Клавіша сервера Temp" DH & розмір або ECDH & крива, коли це застосовується, безпосередньо перед "рукостисканням прочитано x та написано y", тому вам більше не потрібно розшифрувати його. Нещодавно Apache mod_ssl, який автоматично вибирає DHE : httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile (який відзначає проблему про клієнтів Java).