Простой мониторинг SSL сертификатов с помощью Zabbix

Недостатком простоты является некоторое количество ручной работы по добавлению элементов данных и триггеров, но лучше один раз сделать и потом не бегать с дымящейся известно_чем в день X.

1. Импортируем шаблон в Zabbix (на версиях 2.2 – 2.4 точно будет работать) zbx_export_templates_ssl;

2. “Присоединяем” шаблон к Zabbix server;

3. Правим конфиг Zabbix агента на сервере (я надеюсь он у вас установлен и мониторит сам сервер, потому что для этого есть хороший шаблон “из коробки”). Добавляем в /etc/zabbix/zabbix_agentd.conf (если у вас debian или вроде того).

UserParameter=ssl.eol[*],date -d "`echo | openssl s_client -connect "$1":"$2" 2>/dev/null | openssl x509 -noout -dates | grep "notAfter" | sed 's|.*notAfter=||'`" +%s
UserParameter=ssl.current,date +%s

4. Перезапускаем Zabbix агента /etc/init.d/zabbix-agent restart

5. Затем можно сходить в “Последние данные”, выбрать Zabbix server и убедиться что элемент данных возвращает значения. А так же открыть шаблон и посмотреть из чего он состоит.

Итак, у нас есть два элемента данных ssl.current – текущее время и ssl.eol[google.com,443] (end-of-life) в unix формате. Данные забираются с агента путём манипуляции с конвертацией даты. Для элемента данных добавлено два триггера, которые срабатывают за три недели и за неделю до окончания срока действия сертификата. Для простоты клонируйте элементы данных и триггеры, меняя нужные значения. И не забудьте добавить зависимость трёхнедельного триггера от недельного.

Если у вас что-то не завелось – попробуйте на Zabbix сервере вручную выполнить запрос:

echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -dates

Команда позаимствована тут: http://www.shellhacks.com/ru/Kak-Proverit-Srok-Deystviya-SSL-Sertifikata-iz-Komandnoy-Stroki-v-Linux

6 Comments

  1. Вопрос: если у меня несколько сертификатов на разных серверах, то мне клонировать надо только item с данными ssl.eol? А item c данными ssl.current останется в шаблоне один?

    1. Да, ssl.current это текущее время в unix формате. Не слишком элегантно, но работает).
      А лучше смотрите: http://djvn.sk/ssl2/

  2. Есть минимум 2 способа проверки даты протухания SSL сертификата . Через опрос веб сервера или через опрос файлов сертификатов на сервере где они лежат. Помощь .

    1. Тоже верно, но не всегда есть возможность поставить Zabbix агент на нужный сервер.

  3. Дмитрий says:

    Добрый день!
    Есть проблема: если у вас на одном IP несколько сайтов, то данная команда:
    echo | openssl s_client -connect ХОСТ:ПОРТ 2>/dev/null | openssl x509 -noout -dates
    вернёт вам даты первого сертификата. А если вам нужны данные по сертификату второго сайта?

    Вот эта команда вернёт всё как надо:
    echo | openssl s_client -connect ХОСТ:ПОРТ -servername ХОСТ 2>/dev/null | openssl x509 -noout -dates
    добавляем вот эту часть: -servername ХОСТ

    И, соответственно, в конфигурационном файле zabbix-agent:
    UserParameter=ssl.eol[*],date -d "`echo | openssl s_client -connect "$1":"$2" -servername "$1" 2>/dev/null | openssl x509 -noout -dates | grep "notAfter" | sed 's|.*notAfter=||'`" +%s
    добавилась часть: -servername “$1”

    1. Действительно, так оно и есть, пример ниже.
      https://ru.wikipedia.org/wiki/Server_Name_Indication

      ~$ echo | openssl s_client -connect forum.mtrend.ru:443 2>/dev/null | openssl x509 -noout -subject
      subject= /CN=cabinet.mtrend.ru
      ~$ echo | openssl s_client -connect cabinet.mtrend.ru:443 2>/dev/null | openssl x509 -noout -subject
      subject= /CN=cabinet.mtrend.ru

      ~$ echo | openssl s_client -connect forum.mtrend.ru:443 -servername forum.mtrend.ru 2>/dev/null | openssl x509 -noout -subject
      subject= /CN=*.mtrend.ru
      ~$ echo | openssl s_client -connect cabinet.mtrend.ru:443 -servername cabinet.mtrend.ru 2>/dev/null | openssl x509 -noout -subject
      subject= /CN=cabinet.mtrend.ru

Leave a Reply to СертПромЭкспертиза Cancel reply

Your email address will not be published. Required fields are marked *