Próbuję uzyskać certyfikat SSL / TLS dla jednego z naszych modułów równoważenia obciążenia (Netscaler) przy użyciu:
openssl s_client -showcerts -connect lb.example.com:443
Ale nie pokaże mi certyfikatu:
CONNECTED(00000003)
write:errno=54
Korzystanie -servername lb.example.com
nie pomaga, a nasz sysadmin powiedział mi, że nasze moduły równoważące obciążenia i tak nie używają SNI.
Edycja : serwer znajduje się w naszym intranecie i nie przyjmuje połączeń z publicznego Internetu. To jest wynik operacji openssl z -debug
:
CONNECTED(00000003)
write to 0x7fec7af0abf0 [0x7fec7b803a00] (130 bytes => 130 (0x82))
0000 - 80 80 01 03 01 00 57 00-00 00 20 00 00 39 00 00 ......W... ..9..
0010 - 38 00 00 35 00 00 16 00-00 13 00 00 0a 07 00 c0 8..5............
0020 - 00 00 33 00 00 32 00 00-2f 00 00 9a 00 00 99 00 ..3..2../.......
0030 - 00 96 03 00 80 00 00 05-00 00 04 01 00 80 00 00 ................
0040 - 15 00 00 12 00 00 09 06-00 40 00 00 14 00 00 11 .........@......
0050 - 00 00 08 00 00 06 04 00-80 00 00 03 02 00 80 00 ................
0060 - 00 ff a6 f7 27 1a a7 18-85 cf b2 03 22 fc 48 3d ....'.......".H=
0070 - dd a9 2c b7 76 67 62 80-df 85 ed 48 35 c7 d4 87 ..,.vgb....H5...
0080 - 8d d3 ..
read from 0x7fec7af0abf0 [0x7fec7b809000] (7 bytes => -1 (0xFFFFFFFFFFFFFFFF))
write:errno=54
I to jest odpowiedni wynik z curl -v https://lb.example.com/
:
$ curl -vI https://lb.exmple.com/
* Trying 1.2.3.4...
* Connected to lb.exmple.com (10.1.2.3) port 443 (#0)
* TLS 1.2 connection using TLS_RSA_WITH_AES_256_CBC_SHA
* Server certificate: lb.example.com
* Server certificate: RapidSSL SHA256 CA - G2
* Server certificate: GeoTrust Primary Certification Authority - G3
> HEAD / HTTP/1.1
> Host: lb.exmple.com
> User-Agent: curl/7.43.0
> Accept: */*
>
Wszelkie sugestie, w jaki sposób mogę uzyskać certyfikat za pomocą openssl s_client
?
ssl
certificate
https
openssl
Daniel Serodio
źródło
źródło
-debug
) do pytania.Odpowiedzi:
Po jakimś czasie doszedłem do wniosku: ten konkretny moduł równoważenia obciążenia został skonfigurowany do używania tylko TLSv1.2, czego nie rozumie wersja openssl zawarta w OS X (0.9.8). Zainstalowałem nowszą wersję openssl (> = 1.0.1) przy użyciu homebrew, więc działa to:
źródło
Jeśli jest to nowoczesna konfiguracja (niektórzy rezygnują z tego, co to oznacza), użyj:
Wygląda na to, że istnieje dodatkowa preambuła w bajcie 0 i 1. W bajcie 2 powinien znajdować się typ rekordu. W bajcie 3 i 4 powinien znajdować się numer wersji. Bajty 5 i 6 powinny mieć długość 16 bitów.
Oto działający przykład:
Z góry typ rekordu znajduje się w pozycji 0, a jego wartość to 0x16. 0x16 to typ uzgadniania. Wersja warstwy rekordu to kolejne dwa bajty na pozycjach 2 i 3. Ich wartości to
0x03 0x01
. Długość ładunku wynosi0x007f
.Zobacz także RFC 5246, Protokół Transport Layer Security (TLS) wersja 1.2 , strona 18:
Twoim problemem może być stary typ rekordu zgodny z SSLv2. Lub może to być niższa wersja OpenSSL z, powiedzmy 0.9.5 lub 0.9.8. Trudno powiedzieć i prawdopodobnie potrzebujemy więcej informacji.
Więcej informacji obejmowałoby system operacyjny; Wersja OpenSSL; jeśli próbowałeś zastąpić wersję OpenSSL platformy własną wersją OpenSSL; jeśli jest zapora ogniowa lub pole „kontrola sieci” lub inne dobra oprogramowanie pośrednie; i co otrzymuje serwer.
To brzmi trochę niecodziennie. Ale jest rozszerzeniem TLS, więc jest ignorowane, jeśli nie jest używane (i nie spowoduje śmiertelnego alarmu).
Zasada praktyczna w 2016 roku: zawsze używaj TLS 1.0 lub nowszej i zawsze używaj SNI.
źródło