Управление лицензиями
Как работает лицензирование ModernERP Pro: проверка цифровой подписи, привязка к оборудованию (HWID) и управление сроком поддержки.
Общие принципы
ModernERP Pro использует RSA-подпись для защиты лицензионного файла от подделки, а также аппаратную привязку (HWID) для предотвращения копирования лицензии на другой сервер. Это гарантирует, что лицензия действительна только для конкретной установки.
Лицензионный файл хранится в config/license/license.key (или по пути, заданному переменной окружения MODERNERP_LICENSE_KEY). Файл содержит:
- payload – данные о лицензии (тип, срок поддержки, HWID).
- signature – цифровая подпись, созданная с использованием приватного ключа вендора.
Проверка выполняется автоматически при каждом запросе через сервис LicenseManager.
Проверка подписи
При старте системы LicenseManager::isValid() выполняет следующие шаги:
- Читает файл лицензии и публичный ключ (хранится в
config/license/public.pem). - Декодирует подпись из Base64 и проверяет её с помощью
openssl_verify. - Если подпись не совпадает – лицензия считается недействительной, система блокируется.
license.key вручную. Любое изменение нарушит подпись и сделает лицензию недействительной. Для обновления лицензии всегда используйте официальный файл, полученный от вендора.
Аппаратная привязка (HWID)
HWID (Hardware ID) — это уникальный идентификатор сервера, вычисляемый на основе:
/etc/machine-id(для Linux) — основной источник.- Если файл отсутствует, используется
/var/lib/dbus/machine-id. - В крайнем случае — серийный номер CPU из
/proc/cpuinfo.
Полученное значение хешируется с солью и сохраняется в лицензии. При каждой проверке HWID пересчитывается и сравнивается с сохранённым в payload. Если они не совпадают — лицензия считается недействительной.
Срок поддержки (Support Period)
Лицензия содержит поле expires_at, определяющее, до какой даты действует подписка на обновления и техническую поддержку. Это поле влияет только на доступ к обновлениям, но не блокирует работу ядра системы — базовая функциональность сохраняется даже после истечения срока.
Проверка срока выполняется методом LicenseManager::isSupportActive():
- Если
expires_atотсутствует — поддержка бессрочная. - Если текущая дата ≤
expires_at— поддержка активна. - Если срок истёк — поддержка неактивна, но ядро продолжает работать.
На странице лицензии отображается количество оставшихся дней до истечения поддержки.
Как проверить статус лицензии
Для администраторов с ролью ROLE_ADMIN доступна страница «Лицензия» (обычно по пути /admin/company/license). На ней отображаются:
- Статус валидности – действительна ли лицензия (подпись + HWID).
- Тип лицензии (например, «Enterprise Perpetual»).
- Оставшиеся дни поддержки – сколько дней до истечения
expires_at. - Маскированный публичный ключ – для идентификации используемой пары ключей.
Если лицензия недействительна, система отобразит соответствующее предупреждение, а доступ к интерфейсу будет ограничен.
Связанные разделы документации
- Мониторинг системы – нагрузка CPU, память, диск.
- Безопасность и аудит – логирование, защита данных.