Веб-приложение для мониторинга сроков действия сертификатов электронной подписи с уведомлениями в MAX и Telegram.
  • PHP 76%
  • JavaScript 13.7%
  • CSS 10.3%
Найти файл
2026-08-30 19:28:48 +03:00
app Initial release 1.0.0 2026-08-30 19:28:48 +03:00
bin Initial release 1.0.0 2026-08-30 19:28:48 +03:00
cron Initial release 1.0.0 2026-08-30 19:28:48 +03:00
database Initial release 1.0.0 2026-08-30 19:28:48 +03:00
docs Initial release 1.0.0 2026-08-30 19:28:48 +03:00
public Initial release 1.0.0 2026-08-30 19:28:48 +03:00
storage Initial release 1.0.0 2026-08-30 19:28:48 +03:00
.gitattributes Initial release 1.0.0 2026-08-30 19:28:48 +03:00
.gitignore Initial release 1.0.0 2026-08-30 19:28:48 +03:00
CHANGELOG.md Initial release 1.0.0 2026-08-30 19:28:48 +03:00
LICENSE Initial release 1.0.0 2026-08-30 19:28:48 +03:00
LICENSING-RU.md Initial release 1.0.0 2026-08-30 19:28:48 +03:00
README.md Initial release 1.0.0 2026-08-30 19:28:48 +03:00
SECURITY.md Initial release 1.0.0 2026-08-30 19:28:48 +03:00
THIRD-PARTY-RU.md Initial release 1.0.0 2026-08-30 19:28:48 +03:00
VERSION Initial release 1.0.0 2026-08-30 19:28:48 +03:00

CertMon

CertMon — веб-приложение для учёта сроков действия сертификатов электронной подписи и периодов использования закрытых ключей КриптоПро.

Приложение показывает сертификаты в одной таблице, определяет ближайшую контрольную дату и заранее отправляет уведомления в MAX, Telegram или одновременно в оба канала.

При синхронизации с КриптоПро браузер передаёт на сервер только сведения о сертификатах. Закрытые ключи, ключевые контейнеры и ПИН-коды в CertMon не загружаются.

Возможности

  • чтение сведений о сертификатах из локального хранилища КриптоПро;
  • ручная загрузка сертификатов в форматах .crt и .cer;
  • учёт срока действия сертификата;
  • учёт периода использования закрытого ключа, если КриптоПро предоставляет эти сведения;
  • выбор контрольной даты по более раннему из двух сроков;
  • уведомления через MAX, Telegram или оба канала;
  • защита от повторной успешной отправки одного и того же уведомления;
  • локальные учётные записи администраторов;
  • ограничение числа неудачных попыток входа;
  • автоматическое завершение неактивной сессии;
  • автоматическое удаление давно просроченных записей;
  • хранение данных в SQLite без отдельного сервера базы данных.

Как определяется контрольная дата

Если для сертификата известен только срок его действия, CertMon использует дату окончания сертификата.

Если КриптоПро также сообщает дату окончания периода использования закрытого ключа, CertMon сравнивает обе даты и выбирает более раннюю.

Пример:

Сертификат действителен до:       20.12.2026
Закрытый ключ используется до:    15.11.2026
Контрольная дата CertMon:          15.11.2026

Уведомления

До контрольной даты Действие
Более 30 дней уведомление не отправляется
От 30 до 8 дней отправляется одно уведомление
7 дней отправляется отдельное предупреждение
От 6 до 1 дня уведомление отправляется не чаще одного раза в сутки по каждому выбранному каналу
Срок истёк отправляется одно уведомление о просрочке

Неудачная отправка не считается доставленной. При следующем запуске проверки CertMon может повторить попытку.

Запись сертификата автоматически удаляется из базы через 30 дней после контрольной даты. Сам сертификат и его закрытый ключ в КриптоПро при этом не изменяются и не удаляются.

Требования к серверу

CertMon является обычным веб-приложением и не привязан к конкретной операционной системе.

Для работы необходимы:

  • веб-сервер с поддержкой PHP;
  • PHP 8.2 или новее;
  • расширения PHP PDO, pdo_sqlite, mbstring, curl и openssl;
  • возможность запуска PHP из командной строки для периодических заданий;
  • HTTPS;
  • возможность записи процесса PHP в каталог storage.

В документации приведены примеры для nginx, PHP-FPM и cron. При другой серверной среде их можно заменить эквивалентной настройкой.

Требования к рабочему компьютеру

Для синхронизации через КриптоПро нужны:

  • КриптоПро CSP;
  • КриптоПро ЭЦП Browser plug-in;
  • расширение КриптоПро для используемого браузера;
  • сертификаты, доступные текущему пользователю компьютера.

КриптоПро устанавливается на рабочий компьютер. На сервер CertMon КриптоПро CSP устанавливать не требуется.

Установка

CertMon не изменяет операционную систему и не устанавливает системные пакеты. Администратор самостоятельно размещает файлы на веб-сервере, настраивает сайт и после этого выполняет первоначальную настройку через install.php.

Краткая последовательность:

  1. распакуйте файлы CertMon в выбранный каталог;
  2. разрешите процессу PHP запись в storage;
  3. настройте веб-сервер так, чтобы корневым каталогом сайта был только public;
  4. настройте HTTPS;
  5. при необходимости синхронизации с КриптоПро загрузите официальный cadesplugin_api.js в public/assets/js/;
  6. откройте https://ваш-сайт/install.php и выполните первоначальную настройку;
  7. настройте периодический запуск служебных PHP-файлов.

Подробная инструкция: docs/INSTALL-RU.md.

Первоначальная настройка

Страница install.php проверяет версию PHP, необходимые расширения, файл схемы базы данных и право записи в storage.

На странице задаются:

  • адрес приложения;
  • базовый путь, если CertMon размещён не в корне сайта;
  • часовой пояс;
  • доверенные обратные прокси-серверы, если они используются;
  • имя и пароль первого администратора;
  • канал уведомлений;
  • токен и идентификатор чата MAX;
  • токен и идентификатор чата Telegram;
  • при необходимости параметры прокси-сервера для Telegram.

После успешной настройки CertMon создаёт рабочую базу SQLite, локальный файл конфигурации и признак завершённой установки. Повторная первоначальная настройка после этого блокируется.

До завершения первоначальной настройки доступ к install.php следует разрешать только администратору.

КриптоПро

Файл cadesplugin_api.js не входит в CertMon и не распространяется вместе с исходным кодом.

Актуальную копию следует получить непосредственно с официального сайта КриптоПро и сохранить по пути:

public/assets/js/cadesplugin_api.js

Без этого файла CertMon продолжает работать, но синхронизация с локальным хранилищем КриптоПро недоступна. Ручная загрузка .crt и .cer от него не зависит.

Подробности: docs/CRYPTOPRO-RU.md.

MAX и Telegram

CertMon может использовать один канал уведомлений или оба одновременно.

Для MAX используются токен бота и идентификатор чата. Соединение выполняется с проверкой сертификата HTTPS.

Для Telegram используются токен бота и идентификатор чата. При необходимости можно настроить HTTP-, HTTPS- или SOCKS5-прокси.

Параметры задаются во время первоначальной настройки и сохраняются в локальном storage/config.env.

Проверка уведомлений

После установки настроенные каналы можно проверить из командной строки:

php /var/www/certmon/bin/test-notification.php

Только MAX:

php /var/www/certmon/bin/test-notification.php max

Только Telegram:

php /var/www/certmon/bin/test-notification.php telegram

Команды следует запускать от того пользователя, который имеет доступ к storage/config.env и рабочей базе.

Периодические задания

Для автоматической проверки сертификатов необходимо настроить периодический запуск:

cron/check-certificates.php

Дополнительно используются:

cron/cleanup-expired-certificates.php
cron/cleanup-authentication-attempts.php

Пример для cron приведён в docs/INSTALL-RU.md.

Рабочие данные

Все изменяемые данные находятся в каталоге storage.

Основные файлы:

storage/config.env
storage/certmon.sqlite3
storage/installed.lock
storage/logs/

Они не входят в репозиторий и не должны попадать в публичные архивы.

Резервное копирование

Для полноценного восстановления необходимо сохранить:

  • согласованный снимок certmon.sqlite3;
  • storage/config.env;
  • storage/installed.lock.

Подробная инструкция: docs/BACKUP-AND-RESTORE-RU.md.

Обновление

Перед обновлением необходимо сделать резервную копию рабочей базы и storage/config.env.

Порядок перехода между версиями должен соответствовать документации конкретного выпуска. Для версии 1.0.0 предыдущего публичного выпуска нет.

Безопасность

Основные правила:

  • через веб-сервер должен публиковаться только каталог public;
  • каталог storage не должен быть доступен через HTTP;
  • право записи процессу PHP требуется только для storage;
  • первоначальную настройку следует выполнять через HTTPS;
  • до окончания первоначальной настройки доступ к install.php следует ограничить;
  • в список доверенных обратных прокси-серверов следует добавлять только реальные служебные адреса;
  • рабочую базу, файл конфигурации, журналы и токены нельзя публиковать.

Подробности: SECURITY.md.

Документация

Структура проекта

app/            основной серверный код
bin/            служебные команды
cron/           периодические задания
database/       схема базы данных
docs/           документация
public/         открытая через веб-сервер часть приложения
public/api/     обработчики запросов
storage/        рабочие данные конкретной установки

Лицензия

Собственный код CertMon распространяется по лицензии PolyForm Internal Use License 1.0.0 с дополнительным разрешением на личное использование.

Условия разрешают частным лицам и организациям использовать CertMon для собственных задач, а также изменять код для такого использования. Распространение программы и изменённых вариантов третьим лицам, перепродажа и передача лицензии не разрешаются.

Программное обеспечение предоставляется «как есть», без каких-либо гарантий. Автор не несёт ответственности за последствия его использования.

Сторонние компоненты сохраняют собственные условия лицензирования.

Подробнее: LICENSING-RU.md.

Автор

Разработка: Виталий Егоров
E-mail: egorowitaliy@gmail.com