Рейтинг:1

curl говорит, что срок действия действительного сертификата истек

флаг in

У меня есть версия сообщества gitlab, размещенная на сервере, и при использовании curl на этом сервере для получения этого локального веб-сайта gitlab я получаю ошибку сертификата с истекшим сроком действия, даже если даты действительны:

curl --insecure -vvI https://gitlab.mysite.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Сертификат сервера:/ { cert=1 } /^\*/ { if (cert) print }'
*Сертификат сервера:
* тема: CN=gitlab.mysite.com
* дата начала: 12 ноября 14:36:12 2021 по Гринвичу
* срок действия: 10 февраля 14:36:11 2022 GMT
* эмитент: C=US; O=Давайте зашифруем; CN=R3
* Результат проверки SSL-сертификата: срок действия сертификата истек (10), все равно продолжается.

Но я не получаю эту ошибку с истекшим сроком действия сертификата при загрузке сайта из браузера или при использовании curl на другом сервере. Ошибка появляется только при локальном использовании curl на сервере, на котором размещен экземпляр gitlab ce.

Вот результат при использовании curl на другом сервере:

*Сертификат сервера:
* тема: CN=gitlab.mysite.com
* дата начала: 12 ноября 14:36:12 2021 по Гринвичу
* срок действия: 10 февраля 14:36:11 2022 GMT
* эмитент: C=US; O=Давайте зашифруем; CN=R3
* Проверка сертификата SSL в порядке.

Возможно ли, что проблема связана с тем, что завиток разрешается на локальный веб-сайт (разрешенный ip = 127.0.1.1)?

флаг cn
Bob
Проблема может быть связана со старым корневым сертификатом Let's encrypt, а не с фактическим сертификатом сервера. https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/
tio oit avatar
флаг in
Я использовал OpenSSL для получения дополнительной информации, и вот что я получил: openssl s_client -showcerts -connect gitlab.mysite.com:443
Raul Benet avatar
флаг ru
@tiooit, какую ОС и версию вы используете? Какая версия керла? Какую версию SSL использует curl (если вы используете Linux, вы можете узнать, выполнив «sh $ readelf -d `what curl`» и найдя запись, содержащую libssl]?
Raul Benet avatar
флаг ru
Извините, форматирование исказило команду `readelf` в комментарии выше – посмотрим, правильно ли я понял на этот раз ```sh$ readelf -d `what curl` ```
tio oit avatar
флаг in
На сервере работает Debian 9.13 с curl 7.52.1, но команда readelf не показывает никаких данных libssl.
Raul Benet avatar
флаг ru
Оказывается, в Debian 9.3 (и, возможно, во многих других) `curl` сначала зависит от `libcurl`, который, в свою очередь, зависит от `libssl`. Следовательно, почему вы не получили данных libssl при выпуске readelf. Проверка репозитория Debian 9.3 показывает, что curl использует OpenSSL 1.0.2d (это может не зависеть от установки пакета openssl). И, следовательно, вы, скорее всего, затронуты проблемой, упомянутой в моем ответе.
Raul Benet avatar
флаг ru
На самом деле ваш вопрос, вероятно, является дубликатом https://serverfault.com/q/1079199/473319, и я бы сначала попробовал следующий ответ: https://serverfault.com/a/1080278/473319
tio oit avatar
флаг in
Вы абсолютно правы! Применение упомянутого исправления ответа действительно решило проблему, спасибо :)
Рейтинг:3
флаг ru

У меня были эти симптомы (работает в браузере, не работает в Curl) на моем компьютере с Ubuntu 16.04, curl 7.47.0.

В моем случае проблема действительно была вызвана просроченным сертификатом Let's Encrypt (как упоминал Боб), но на самом деле была создана ошибка об обработке OpenSSL деревьев сертификатов с несколькими путями.

Убунту 16.04

Эта проблема с OpenSSL была исправлена ​​в версии 1.0.2g-1ubuntu4.20 (последняя на сегодняшний день) пакета для Ubuntu 16.04 (см. журнал изменений здесь).

Если вы используете Ubuntu 16.04, попробуйте обновить OpenSSL до последней версии. Если вы находитесь в другой системе, проверьте свою версию OpenSSL. Версии до 1.1.x имеют проблему и требуют «исправления» (как это сделано для дистрибутива Ubuntu, упомянутого выше). Если вы не можете перейти на использование версии OpenSSL с исправлением, вы можете прибегнуть к отключению сертификата, вызывающего проблему. Способ отключения сертификата зависит от вашей ОС/дистрибутива.

Дебиан 9.3

(обновленный ответ - как только OP определил ОС как Debian 9.3)
Кажется, что для Debian 9.3 это будет повторяющийся вопрос (у меня недостаточно прав, чтобы пометить его как таковой).
Клиент в Debian 9 ошибочно сообщает об истечении срока действия сертификата для домена, выданного letsencrypt
И OP успешно применил этот ответ (что эквивалентно моему предложению выше для Ubuntu 16.04):
https://serverfault.com/a/1080278/473319

Дополнительная информация

Следующая страница может предоставить дополнительную справочную информацию и указатели, чтобы лучше понять проблему. https://scotthelme.co.uk/lets-encrypt-old-root-expiration/

tio oit avatar
флаг in
Спасибо вам за ваши предложения. Я проверил версию OpenSSL, и она 1.1.0l, поэтому на нее не должна влиять ошибка, о которой вы говорите. Я также недавно обновил сертификат, но он все еще не работает при вызове веб-сайта с сервера, на котором он размещен.
Paul avatar
флаг cn
Ubuntu 16.04 — окончание срока службы. Пожалуйста, обновите свой сервер до поддерживаемой версии.
tio oit avatar
флаг in
Для всех, кто ищет решение, Рауль Бенет дал решение в комментарии к моему вопросу.
Raul Benet avatar
флаг ru
Чтобы сделать его более понятным, я расширил ответ. @tiooit, пожалуйста, примите его снова, чтобы он был помечен как ответ. Спасибо.

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

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