Arhn - архитектура программирования

Срок действия сертификата Openssl истек, хотя он еще не

У меня возникла проблема с тем, что curl и openssl сообщают о сроке действия сертификата клиента, хотя его дата notAfter находится в будущем:

# echo | openssl s_client -showcerts -connect example.com:443 2>&1 | grep Verify
    Verify return code: 10 (certificate has expired)

Но

# echo | openssl s_client -showcerts -connect example.com:443 2>&1 | openssl x509 -noout -dates
notBefore=Oct 17 00:00:00 2011 GMT
notAfter=Oct 21 12:00:00 2014 GMT

Системная дата верна. Firefox также не показывает никаких ошибок для сертификата этого сайта. Версии Openssl, которые я пробовал, это OpenSSL 1.0.1e-fips 11 Feb 2013 и OpenSSL 1.0.1f 6 Jan 2014. Я нашел похожую проблему здесь, где автор утверждает, что проблема отсутствует в openssl 0.9.8, но присутствует в 1.0.1.

Почему это происходит?

28.07.2014

  • Из любопытства, получите ли вы ожидаемые результаты, если попробуете свои команды без опции -showcerts? Кроме того, получите ли вы ожидаемые результаты, если попробуете свои команды на сайтах с известными действительными сертификатами (такими как paypal.com, citibank.com и т. д.)? 31.07.2014
  • Попробуйте добавить -tls1 -servername foo.example.com. Я предполагаю, что у вас есть внешний сервер, который предоставляет домен по умолчанию для запросов без SNI, а домен по умолчанию направляется на внутренний сервер со старым сертификатом. Когда браузеры подключаются, они используют SNI и получают сервер, для которого вы обновили сертификат. Или в обслуживаемой цепочке может быть промежуточное звено с просроченным сертификатом. Если вы предоставите реальную информацию, нам будет легче помочь вам с такими проблемами. 06.05.2016
  • Та же проблема, не знаю почему. 07.10.2016
  • @linjunhalida, мой был из-за того, что срок действия одного из сертификатов в иерархии сертификатов, подтверждающих этот, истек 07.10.2016
  • @Fluffy Ну, я решаю это, обновив свою OSX до 10.12 :-P 08.10.2016
  • @Fluffy У меня такая же проблема. Как вы решили это именно? 20.10.2016
  • Кто-нибудь еще сталкивался с этой проблемой. У меня сработала установка cacert.pem из Mozilla, следуя инструкциям в разделе «Решение» здесь: momentum.spindance.com/2015/08/ 21.10.2016

Ответы:


1

Моя проблема заключалась в том, что срок действия сертификата действительно истек, но не этот конкретный, а один в цепочке подписи.

Например, для Google эта команда openssl s_client -showcerts -connect google.com:443 </dev/null | openssl x509 -noout -dates показывает:

notBefore=Oct  6 12:37:54 2016 GMT
notAfter=Dec 29 12:28:00 2016 GMT

Однако только openssl s_client -showcerts -connect google.com:443 </dev/null показывает не 1, а 3 сертификата (заключенных в ---BEGIN/END CERTIFICATE--- частях), первый из них принадлежит google и именно он проверен. Чтобы убедиться в этом, я скопировал (вероятно, должен быть менее ручной способ) первый в /tmp/google и последний в /tmp/geotrust, теперь запуск openssl x509 -noout -dates < /tmp/google дает мне:

notBefore=Oct  6 12:37:54 2016 GMT
notAfter=Dec 29 12:28:00 2016 GMT

Что соответствует выводу первой команды и openssl x509 -noout -dates < /tmp/geotrust:

notBefore=May 21 04:00:00 2002 GMT
notAfter=Aug 21 04:00:00 2018 GMT

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

И кстати, поскольку в комментарии к вопросу предлагается обновить ОС, чтобы решить эту проблему, я полагаю, что причина та же. ОС поставляется с кучей корневых сертификатов, поэтому, если у вас сумасшедшая старая ОС, срок действия некоторых из них может истечь, вы можете либо обновить эти корневые сертификаты, либо всю ОС, чтобы решить проблему.

Также полезно знать, что запуск без showcerts дает вам хорошее представление о цепочке сертификатов - openssl s_client -connect google.com:443 </dev/null:

---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---

Все это не должно быть просрочено.

21.10.2016

2

Если вы просто выполните openssl s_client -connect <server>:<port>, он должен показать вам в конце после строки Verify... что-то вроде:

---
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify error:num=10:certificate has expired
notAfter=May 30 10:48:38 2020 GMT
read:errno=10093

По сути, в этом сообщении об ошибке упоминается сертификат в цепочке сертификатов, который не был проверен, и причина, по которой это произошло.

02.06.2020

3

Сегодня у меня возникла аналогичная проблема, и я зашел сюда с намерением найти ответ. К счастью, я получил ответ сам. Вот как я это понял:

  1. когда я получил код возврата подтверждения: 10 (срок действия сертификата истек) ошибка в ящике, я попробовал другой ящик и не получил ошибку на том же сайте SSL, что на самом деле является ошибкой проверки: число = 20: невозможно получить локальный эмитент сертификат (приемлемый для меня)
  2. тогда я подумал, что основная причина должна быть в первом поле, увидев эту ошибку. Наиболее вероятной причиной могли быть какие-то разные сертификаты ЦС в хранилище доверенных сертификатов, хотя я все еще не знал, где он был для первого ящика.
  3. чтобы получить файл, влияющий на проверку проверки сертификата, я добавил strace перед openssl s_client ... и внимательно прочитал файлы, показанные в большой области вывода, особенно те, которые находятся рядом с ошибкой Verify return code: 10 (срок действия сертификата истек). У меня есть 2 подозрительных файла
  4. Я запустил openssl x509 -text -in {filename} для проверки двух файлов, и мне удалось подтвердить, что один из них был основной причиной, поскольку срок его действия истек. Это промежуточный сертификат

С учетом сказанного, пожалуйста, проверьте, есть ли какие-либо промежуточные/корневые сертификаты, срок действия которых истек в вашем локальном хранилище доверенных сертификатов (возможно, /usr/lib/ssl/certs/ для openssl), которые отравляют проверку команды клиента openssl или команды curl.

27.06.2021
  • Чем ваш ответ отличается от принятого ответа? 28.06.2021
  • Я только что добавил сообщение, которое я получил на другом ящике в сообщении выше. 28.06.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..