Получение сертификата SSL/TLS сервера с помощью " клиента openssl s"

Я пытаюсь получить сертификат SSL / TLS для одного из наших балансировщиков нагрузки (Netscaler) с помощью:

openssl s_client -showcerts -connect lb.example.com:443

но он не покажет мне сертификат:

CONNECTED(00000003)
write:errno=54

используя -servername lb.example.com не помогает, и наш системный администратор сказал мне, что наши балансировщики нагрузки все равно не используют SNI.

Edit сервер на нашей интрасети и не принимает подключения из интернета. Это вывод openssl с -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

и этого соответствующий вывод 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: */*
>

какие-либо предложения о том, как я могу получить сертификат с помощью openssl s_client?

22
задан Daniel Serodio
01.03.2023 16:08 Количество просмотров материала 3102
Распечатать страницу

2 ответа

через некоторое время я понял: этот конкретный балансировщик нагрузки был настроен на использование только TLSv1.2, что версия openssl, включенная в OS X (0.9.8), не понимает. Я установил новую версию openssl (>= 1.0.1) с помощью homebrew, так что это работает:

/usr/local/opt/openssl/bin/openssl s_client -showcerts -connect lb.example.com:443
16
отвечен Daniel Serodio 2023-03-02 23:56

Я пытаюсь получить сертификат SSL / TLS для одного из наших нагрузки балансировщики (Netscaler) использование:

 openssl s_client -showcerts -connect lb.example.com:443

если его современная конфигурация (некоторые стороны отказываясь от того, что это значит), используйте:

openssl s_client -connect lb.example.com:443 -tls1 -servername lb.example.com | \
openssl x509 -text -noout

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
...

похоже, что в байтах 0 и 1 есть дополнительная преамбула. В байте 2 должен быть тип записи. В байте 3 и 4 должен быть номер версии. Байты 5 и 6 должны быть 16-разрядной длиной полезная нагрузка.

вот пример:

$ openssl s_client -connect www.googl.com:443 -tls1 -servername www.googl.com -debug
CONNECTED(00000005)
write to 0x7f7fe1c1fa30 [0x7f7fe2022000] (132 bytes => 132 (0x84))
0000 - 16 03 01 00 7f 01 00 00-7b 03 01 71 c0 12 35 98
...

сверху тип записи находится в позиции 0, а его значение 0x16. 0x16-это тип рукопожатия. Версия слоя записи-следующие два байта в позициях 2 и 3. Их значения 0x03 0x01. Длина полезной нагрузки 0x007f.

см. Также RFC 5246, протокол безопасности транспортного уровня (TLS) версии 1.2, стр. 18:

6.2.1.  Fragmentation

   The record layer fragments information blocks into TLSPlaintext
   records carrying data in chunks of 2^14 bytes or less.  Client
   message boundaries are not preserved in the record layer (i.e.,
   multiple client messages of the same ContentType MAY be coalesced
   into a single TLSPlaintext record, or a single message MAY be
   fragmented across several records).

      struct {
          uint8 major;
          uint8 minor;
      } ProtocolVersion;

      enum {
          change_cipher_spec(20), alert(21), handshake(22),
          application_data(23), (255)
      } ContentType;

      struct {
          ContentType type;
          ProtocolVersion version;
          uint16 length;
          opaque fragment[TLSPlaintext.length];
      } TLSPlaintext;

ваши проблемы может быть старый SSLv2 совместимый тип записи. Или это может быть версия уровня вниз OpenSSL, скажем, 0.9.5 или 0.9.8. Трудно сказать, и нам, вероятно, нужно больше информации.

более подробная информация будет включать в себя ОС; OpenSSL версия; если вы попытались заменить версию платформы OpenSSL с вашей собственной версии OpenSSL; если есть брандмауэр или "веб-inspect" окно или другой middleware добра работает; и то, что сервер получает.


используя -servername lb.example.com не помогает, и наш системный администратор сказал мне, что наши балансировщики нагрузки все равно не используют SNI.

это звучит необычно. Но его расширение TLS, поэтому его игнорируют, если его не использовать (и не будет генерировать фатальное предупреждение).

эмпирическое правило в 2016 году: всегда используйте TLS 1.0 или выше и всегда используйте SNI.

2
отвечен jww 2023-03-03 02:13

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх