ZaLinux.ru

Как использовать s_client для проверки SSL/TLS на веб сервере HTTPS

Как пользоваться s_client

Команда s_client выполняет функции SSL/TLS клиента для подключения к удалённому хосту с использованием SSL/TLS. Данная программа позволяет подключаться с различными настройками SSL/TLS — выбирать используемые шифры, версию рукопожатия, использовать определённые протоколы, тестировать повторное использование сессий. При этом программа показывает все переданные и полученные во время SSL/TLS подключения данные. Благодаря этому возможна доскональная проверка настроек сервера SSL/TLS, тестирование списка отзыва сертификатов и даже проверка на уязвимости.

Выполнив SSL/TLS подключение, s_client позволяет вводить данные, например, отправлять заголовки HTTP протокола, команды SMTP, FTP и т.д.

Для подключения к удалённому хосту укажите адрес домена и порт (обычно это 443) с опцией -connect:

openssl s_client -connect yandex.ru:443

Вы увидите:

1. верификацию и цепочку сертификатов

2. сертификат сайта

3. данные текущей сессии — SSL/TLS (ассиметричное шифрование) используются для обмена ключом для симметричного шифрования, поскольку ассиметричное слишком «затратное». И фактический шифрование данных будет выполняться «паролем» (ключами сессии, а не сертификатом). Эти ключи меняются при каждой новой сессии.

То есть, компрометация приватного ключа сервера ≠ расшифровка трафика. Поскольку необходимо знать все ключи сессии. Раньше, зная приватный ключ сервера, можно было расшифровать SSL трафик — сначала расшифровывались ключи сессии, а затем они использовались для расшифровки данных. Но теперь используется Perfect Forward Secrecy (которая применяет Diffie-Hellman key exchange (DH)), что привело к тому, что третья сторона, даже зная приватный ключ RSA (приватный ключ сервера), не сможет расшифровать TLS трафик.

Как видеть все сертификаты, которые отправляет HTTPS сервер

В предыдущем выводе вы могли обратить внимание, что он содержит сертификат сайта. На самом деле, сервер обычно отправляет цепочку сертификатов — сертификат сайта и все сертификаты промежуточных Центров Сертификации. Чтобы увидеть все сертификаты, которые отправил сервер, используйте опцию -showcerts:

openssl s_client -showcerts -connect yandex.ru:443

Для yandex.ru будет выведено 3 сертификата: 1 сертификат сайта и 2 промежуточных.

Если вам нужно только сертификаты, то используйте следующую конструкцию, чтобы программа не ждала ввода данных:

openssl s_client -showcerts -connect yandex.ru:443 </dev/null

Чтобы сохранить сертификат сайта в файл используйте следующую команду (дважды замените w-e-b.site на интересующий вас домен):

echo | openssl s_client -connect w-e-b.site:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > w-e-b.site.crt

Если вы хотите сохранить всю присылаемую цепочку сертификатов, то сделайте так (дважды замените w-e-b.site на интересующий вас домен):

echo | openssl s_client -showcerts -connect w-e-b.site:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > w-e-b.site.ca-bundle

Проверка TLS/SSL веб-сайта с указанием Центра Сертификации

Если веб-сайт использует самостоятельно созданный сертификат, который не подписан Глобальными Центрами Сертификации, то с помощью опции -CAfile можно указать сертификат того CA, который вы использовали для подписи:

openssl s_client -connect w-e-b.site:443 -CAfile /etc/ssl/CA.crt

Это подходит, например, для тестирования сгенерированных сертификатов на локальном сервере без добавления самодельного CA в корневые Центры Сертификации ОС.

Тестирование протоколов, которые обновляются до SSL

При использовании с HTTP TLS оборачивает весь текстовый канал связи в HTTPS. Некоторые другие протоколы начинаются как открытый текст, но затем они переходят на шифрование. Если вы хотите протестировать такой протокол, вам нужно сообщить OpenSSL, какой это протокол, чтобы он мог обновляться от вашего имени. Укажите информацию о протоколе с помощью ключа -starttls. Например:

openssl s_client -connect gmail-smtp-in.l.google.com:25 -starttls smtp

Поддерживаются в частности следующие протоколы: smtp, pop3, imap, ftp и xmpp.

Отладка SSL/TLS к HTTPS

Во время установки соединения SSL/TLS «под капотом» выполняется много работы. Если у нас есть какие-то проблемы или нам нужна подробная информация об инициализации SSL/TLS, мы можем использовать опцию -tlsextdebug, как показано ниже.

openssl s_client -connect w-e-b.site:443 -tlsextdebug

Как проверить, поддерживает ли HTTPS сервер определённый протокол

По умолчанию s_client будет пытаться использовать лучший протокол для связи с удаленным сервером и сообщать согласованную версию в выходных данных.

    Protocol  : TLSv1.3

Если вам нужно протестировать поддержку определённых версий протокола, у вас есть два варианта. Вы можете явно выбрать один протокол для тестирования, указав один из ключей --ssl3, -tls1, -tls1_1, -tls1_2 или -tls1_3. Кроме того, вы можете выбрать протоколы, которые вы не хотите тестировать, используя один или несколько из следующих параметров: -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2 или -no_tls1_3.

Примечание: не все версии OpenSSL поддерживают все версии протокола. Например, более старые версии OpenSSL не будут поддерживать TLS 1.2 и TLS 1.3, а более новые версии могут не поддерживать более старые протоколы, такие как SSL 2 и SSL 3. К примеру, при попытке использовать опцию -ssl3 на современных версиях OpenSSL возникает ошибка:

s_client: Option unknown option -ssl3

Интерактивные запросы с s_client

Как вы можете увидеть, подключение с помощью s_client не прекращается до истечении таймаута — программа и сервер ожидают ввод данных.

К примеру, выполним подключение:

openssl s_client -connect w-e-b.site:443

И введём:

HEAD / HTTP/1.1
Host: w-e-b.site
User-Agent: fucking best browser ever

Вместо HTTP метода GET использовался HEAD — в результате показана не страница, а только HTTP заголовки.

Получение HTML кода страницы (пример использования метода GET с запросом адреса страницы):

GET /?act=my-user-agent HTTP/1.1
Host: w-e-b.site
User-Agent: fucking best browser ever

Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *