Рейтинг:0

Openssl s_client показывает CONNECT_CR_SRVR_HELLO, только если указана опция -servername

флаг tr

У меня есть настроенный сервер CentOS7 с поддержкой HTTPS с GitLab/nginx, с записью A, зарегистрированной на платном DNS, и сертификатом, проверенным Let's Encrypt. (здесь я буду использовать gitlab.example.com). Доменное имя было протестировано на доступность, по крайней мере, через ssh и обычный HTTP.

С HTTPS я могу подключиться к серверу, используя прямой IP-адрес, например https://x.x.x.x . Хотя появится сообщение об ошибке небезопасного сертификата (из-за несоответствия имени домена), если я решу продолжить, несмотря на предупреждение, страница gitlab отобразится правильно.

Однако, если я попытаюсь получить доступ с помощью https://gitlab.example.com Ошибка ERR_SSL_PROTOCOL_ERROR появится.

Я попытался использовать openssl s_client для отладки проблемы и получил следующие результаты.

openssl s_client -connect gitlab.example.com:443 -servername gitlab.example.com

ПОДКЛЮЧЕН(00000003)
4658671212: ошибка: 1400410B: подпрограммы SSL: CONNECT_CR_SRVR_HELLO: неверный номер версии: 386:
---
нет доступного однорангового сертификата
---
Имена ЦС сертификата клиента не отправлены
---
Рукопожатие SSL прочитало 5 байт и записало 0 байтов
---
Новый, (НЕТ), Шифр ​​(НЕТ)
Безопасное повторное согласование НЕ поддерживается
Сжатие: НЕТ
Расширение: НЕТ
ALPN не согласован
SSL-сессия:
    Протокол: TLSv1.2
    Шифр: 0000
    Идентификатор сессии: 
    Идентификатор сеанса-ctx: 
    Мастер ключ: 
    Время начала: 1641487269
    Время ожидания: 7200 (сек)
    Подтвердите код возврата: 0 (хорошо)
---


Интересно, если я не включу -имя сервера вариант, ошибки не будет, и сертификаты будут получены правильно. Использование прямого IP-адреса с портом 443 также позволит правильно получить сертификаты.

Я пытался найти ошибку в течение нескольких часов, но безуспешно.

Я также пытался использовать curl для доступа и получил ту же ошибку (кажется, эта информация менее полезна, чем результат openssl s_client, за исключением, возможно, информации о том, что доменное имя правильно сопоставлено с IP-адресом)

curl --insecure -Lv https://gitlab.example.com
* Пытаюсь х.х.х.х...
* Установлен TCP_NODELAY
* Подключен к gitlab.example.com (x.x.x.x) порт 443 (#0)
* ALPN, предлагая h2
* ALPN, предлагающий http/1.1
* успешно установить места проверки сертификата:
* CA-файл: /etc/ssl/cert.pem
  CApath: нет
* TLSv1.2 (OUT), рукопожатие TLS, приветствие клиента (1):
* ошибка: 1400410B: подпрограммы SSL: CONNECT_CR_SRVR_HELLO: неправильный номер версии
* Закрытие соединения 0
curl: (35) ошибка: 1400410B: подпрограммы SSL: CONNECT_CR_SRVR_HELLO: неверный номер версии

В журнале Gitlab ничего не отображается, и я думаю, что запрос даже не вышел за рамки этапа рукопожатия SSL.

Я застрял в этой точке. Будем признательны за любую помощь или подсказку о том, как решить эту проблему.

Patrick Mevzek avatar
флаг cn
Вы смотрели файлы журналов вашего веб-сервера (не приложения Gitlab, сервер отвечает на порт 443)? Вы также можете добавить `--verbose` к curl, чтобы получить все детали рукопожатия. Какую версию openssl вы используете? Это может быть проблема TLS 1.0, 1.1, 1.2, 1.3, см. его параметры s_client `-tls1_2` и т. д.
cr001 avatar
флаг tr
Насколько я понимаю, в логе Gitlab есть все, включая сервер nginx. Также «v» в опции -Lv для моего завитка является сокращением опции --verbose

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

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.