Nie znam łatwego w użyciu przełącznika wiersza polecenia, ale w openssl s_client
wierszu polecenia możesz dodać -msg
opcję uzyskania szesnastkowego zrzutu wiadomości uścisku dłoni. Następnie poszukaj ServerKeyExchange
wiadomości; To powinno wyglądać tak:
<<< 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
(...)
i brzmi w ten sposób:
0c 00 03 0b
: komunikat typu „ServerKeyExchange” (to jest „0c”) o długości 0x00030B bajtów.
- Pierwszym elementem jest moduł DH jako duża liczba całkowita z nagłówkiem o długości dwóch bajtów. Tutaj długość jest zakodowana jako
01 00
, co oznacza liczbę całkowitą zakodowaną na 0x0100 bajtów. To 256 bajtów, więc moduł ma długość od 2041 do 2048 bitów.
- Następują moduły bajtów, w niepodpisanej kolejności big-endian. Górne bajty tego modułu to w tym przypadku
ff ff ff ff...
. Moduł ma wtedy długość dokładnie 2048 bitów.
Jeśli korzystasz z zestawu szyfrów ECDHE (krzywa eliptyczna), wówczas ServerKeyExchange
format jest oczywiście inny.
Zobacz standard definicji ServerKeyExchange
wiadomości. W przypadku zestawów szyfrów DHE zawiera moduł p , generator g i klucz publiczny y serwera DH , w tej kolejności, każdy wyrażony jako duża liczba całkowita w formacie opisanym powyżej (16-bitowy nagłówek zawierający długość w bajtach, a następnie liczba całkowita wartość w niepodpisanym kodowaniu big-endian).
Nowsze wersje biblioteki mają tendencję, aby wybrać rozmiar DH Moduł, który w meczach (z punktu widzenia bezpieczeństwa) siłą pary kluczy serwera (używany do podpisania do ServerKeyExchange
wiadomości). W powyższym przykładzie serwer ma 2048-bitowy klucz RSA, więc OpenSSL zdecydował się na użycie 2048-bitowego modułu DH (w tym przypadku dobrze znany moduł opisany w RFC 3526, sekcja 3 ).
Niektóre inne serwery trzymają się 1024-bitowych grup DH w celu zapewnienia zgodności z niektórymi istniejącymi klientami, które nie obsługują większych grup DH (największym przestępcą jest implementacja SSL w Javie, naprawiona w Javie 8 kompilacja 56 w 2012 r.). Znaną wadą protokołu TLS dla zestawów szyfrów DHE jest to, że klient nie ma możliwości określenia, jaki rozmiar modułu może obsługiwać (jest to naprawione w ECDHE, ponieważ klient może określić dokładną listę krzywych, które akceptuje) .
s_client
zawsze wyświetla „Klucz serwera temp” DH i rozmiar lub ECDH i krzywą, jeśli dotyczy, tuż przed „handshake odczytał x i napisał y”, więc nie potrzebujesz już rozszyfrować. Najnowszy mod_ssl Apache, który automatycznie wybiera DHE: httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile (który zwraca uwagę na problem dotyczący klientów Java).