Сайт может отвечать нормально сегодня, а через неделю начать показывать ошибку сертификата. Проверять только факт ответа по HTTPS недостаточно, нужен контроль срока действия того сертификата, который сервер отдаёт клиенту.
Подключимся к домену через openssl s_client. Параметр servername передаёт SNI, чтобы на сервере с несколькими сайтами получить нужный сертификат:
echo | openssl s_client -connect example.com:443 \
-servername example.com 2>/dev/null
В полном выводе много технических деталей. Передадим сертификат следующей команде и покажем дату окончания:
echo | openssl s_client -connect example.com:443 \
-servername example.com 2>/dev/null \
| openssl x509 -noout -enddate
Для мониторинга удобнее не разбирать дату текстом. Ключ -checkend принимает число секунд и возвращает ненулевой код, если сертификат истечёт в пределах заданного периода. Тридцать дней составляют 2592000 секунд:
echo | openssl s_client -connect example.com:443 \
-servername example.com 2>/dev/null \
| openssl x509 -noout -checkend 2592000
Проверку можно запускать по расписанию и отправлять уведомление при ненулевом коде:
set -o pipefail
echo | openssl s_client -connect example.com:443 \
-servername example.com 2>/dev/null \
| openssl x509 -noout -checkend 2592000
Эта проверка следит именно за сроком сертификата с указанного хоста. Она не заменяет полноценную проверку цепочки доверия, совпадения имени и доступности самого приложения.
➡️ DevOps Ready | #практика