скрипт, щоб перевірити, чи сертифікат SSL дійсний


14

У мене є кілька сертифікатів SSL, і я хотів би отримати повідомлення, коли термін дії сертифікату закінчився.

Моя ідея - створити кронштейн, який щодня виконує просту команду.

Я знаю, що opensslкоманду в Linux можна використовувати для відображення інформації про сертифікат віддаленого сервера, тобто:

openssl s_client -connect www.google.com:443

Але я не бачу дати закінчення терміну дії у цьому висновку. Також я повинен скасувати цю команду за допомогою CTRL+ c.

Як я можу перевірити закінчення терміну дії віддаленого сертифіката зі сценарію (бажано, використовуючи openssl) та зробити це в "пакетному режимі", щоб він запускався автоматично без взаємодії з користувачем?


4
Я рекомендую також надіслати ім'я сервера -servername www.google.comдля серверів з підтримкою SNI. Щоб уникнути необхідності припинення, надішліть йому / dev / null< /dev/null
syss

Якщо у вас працює Red Hat / CentOS / Fedora, подивіться на certmonger . Він також доступний у стандартних сховищах.
JRFerguson

Я додав би перевірку сертифіката в інструменті моніторингу, як nagios або icinga.
sebix

Відповіді:


18

Тепер ваша команда очікує http-запиту, наприклад, GET index.phpнаприклад. Використовуйте це замість:

if true | openssl s_client -connect www.google.com:443 2>/dev/null | \
  openssl x509 -noout -checkend 0; then
  echo "Certificate is not expired"
else
  echo "Certificate is expired"
fi

  • true: просто не дасть жодного вводу, а потім eof, так що openssl виходить після з'єднання.
    • openssl ...: команда з вашого запитання
    • 2>/dev/null: вихід помилки буде ігноровано.
  • openssl x509: активує X.509 управління даними сертифікатів.
    • Це зчитується зі стандартного вводу за замовчуванням
    • -noout: Пригнічує весь вихід сертифіката
    • -checkend 0: перевірте, чи термін дії сертифікату минув протягом наступних 0 секунд

-checkendНастільки легше, ніж сценарій, який я знайшов, що робив арифметику дати!
Auspex

7

Він отримує вам сертифікат, але не розшифровує його. Оскільки це було б потрібно, якщо ви хочете побачити, ви не бачите його. Отже, що вам потрібно, це x509встановити його в додаток OpenSSL для декодування сертифіката:

openssl s_client -connect www.example.com:443 \
    -servername www.example.com </dev/null |\
    openssl x509 -in /dev/stdin -noout -text

Це дасть вам повний розшифрований сертифікат на stdout, включаючи дати його дії.


3

Якщо вам потрібно перевірити дату закінчення терміну дії, завдяки цій публікації в блозі , ви знайдете спосіб знайти цю інформацію за допомогою іншої відповідної інформації за допомогою одного дзвінка:

echo | openssl s_client -servername unix.stackexchange.com -connect unix.stackexchange.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

Результат включає емітента, суб'єкта (кому видано сертифікат), дату видачі та нарешті дату закінчення терміну дії :

issuer= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
subject= /C=US/ST=NY/L=New York/O=Stack Exchange, Inc./CN=*.stackexchange.com
notBefore=May 21 00:00:00 2016 GMT
notAfter=Aug 14 12:00:00 2019 GMT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.