Назад | Перейти на главную страницу

Проверка даты выпуска и истечения срока действия сертификатов, связанных с цепочкой сертификатов

Можно ли проверить дату выпуска и истечения срока действия сертификатов, включенных в цепочку сертификатов, просто передав домен?

Мне надоели различные атрибуты openssl s_client, но я не могу получить необходимую информацию.

Требование:

Передайте домен (вместе с портом 443) и с помощью сценария или команды в linux выведите даты выпуска и истечения срока действия, включенные в цепочку сертификатов для домена (веб-сервера).

Ответ - да, вы можете сделать это с помощью openssl, вы можете легко оформить это как "проверочный" скрипт, но я не знаю плагина, который уже это делает.

Сначала кешируйте сертификат сервера и всю цепочку:

echo Q | openssl s_client -connect www.google.com:443 -showcerts > chain.pem

(этот файл цепочки содержит сертификат сайта, промежуточную цепочку, а также другой мусор - это не представляет проблемы для openssl хотя)

Если вы хотите вывести только сведения о каждом сертификате в файле цепочки:

gawk 'BEGIN { pipe="openssl x509 -noout -subject -dates -serial "} \
  /^-+BEGIN CERT/,/^-+END CERT/ { print | pipe }
  /^-+END CERT/                 { close(pipe); printf("\n")}  ' chain.pem

Добавить / опустить -serial, -issuer, -fingerprint, -purpose по желанию. Вы даже можете склеить их в одну линию с (стараясь опустить перенаправление и chain.pem случаев):

echo Q | openssl ... | gawk ...

Если вы хотите правильно проверить цепочку, включая диапазоны дат, продолжайте читать.

Далее вытащите только сертификат сайта (первый), я воспользуюсь sed здесь потому что я ленивый ;-)

sed -n '/-BEGIN/,/-END/p;/-END/q' chain.pem > site.pem

Затем проверьте:

openssl verify -verbose -CAfile chain.pem site.pem

Вот где колеса отрываются: Google (правильно) не предоставляет (самоподписанный) корневой ЦС в цепочке:

site.pem: /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
error 2 at 2 depth lookup:unable to get issuer certificate

Итак, потяните корневой сертификат от Geotrust, сохраните его и настройте подходящий каталог CA:

cd /usr/local/nagios/var/CA  # example!
wget http://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem
c_rehash .

И попробуй еще раз:

openssl verify -verbose -CAfile chain.pem -CApath /usr/local/nagios/var/CA site.pem  

(обратите внимание на дополнительные -CApath параметр) и вы получите:

site.pem: OK  

Теперь плохие новости, openssl не устанавливает код возврата, указывающий на успех, неудачу или что-то полезное. Вам нужно будет обработать вывод, чтобы убедиться, что все в порядке, в основном все, кроме одной строки с «ОК», указывает на проблему. Сертификаты с истекшим сроком действия, которые вы ищете, будут отображаться как:

error 10 at 2 depth lookup:certificate has expired

(где глубина может меняться).

Примечания и предостережения:

  • предоставленная сервером цепочка может не содержать корень (в этом нет необходимости, и если он есть, клиент должен его игнорировать), обойдите это, добавив -CApath /some/path чтобы указать на каталог предварительно хешированных доверенных корней, как показано
  • это не обнаруживает неправильного порядка файла цепочки или лишних сертификатов в файле цепочки (обычно это не проблема для браузеров, но валидатор сайта обычно их помечает)
  • в chain.pem здесь есть лишний мусор, это не проблема для openssl

Я не знаю плагина для проверки дат выпуска, но проверка даты истечения срока действия сертификатов является стандартной функцией плагин check_http.

В частности, см. Параметр -C. Как в:

./check_http -H www.google.com -C 14
OK - Certificate 'www.google.com' will expire on 09/11/2014 11:04.

Обратите внимание, что это будет работать со всем, что использует SSL (LDAPS, IMAPS и т. Д.), А не только с HTTPS.

Если вы хотите проверить сертификаты в цепочке, вы можете попробовать что-то вроде check_ssl_cert. (Я никогда не использовал его, но информация об использовании выглядит так, как будто он делает то, что вы хотите.)