Управление лицензиями

Как работает лицензирование ModernERP Pro: проверка цифровой подписи, привязка к оборудованию (HWID) и управление сроком поддержки.

Общие принципы

ModernERP Pro использует RSA-подпись для защиты лицензионного файла от подделки, а также аппаратную привязку (HWID) для предотвращения копирования лицензии на другой сервер. Это гарантирует, что лицензия действительна только для конкретной установки.

Лицензионный файл хранится в config/license/license.key (или по пути, заданному переменной окружения MODERNERP_LICENSE_KEY). Файл содержит:

  • payload – данные о лицензии (тип, срок поддержки, HWID).
  • signature – цифровая подпись, созданная с использованием приватного ключа вендора.

Проверка выполняется автоматически при каждом запросе через сервис LicenseManager.

Проверка подписи

При старте системы LicenseManager::isValid() выполняет следующие шаги:

  1. Читает файл лицензии и публичный ключ (хранится в config/license/public.pem).
  2. Декодирует подпись из Base64 и проверяет её с помощью openssl_verify.
  3. Если подпись не совпадает – лицензия считается недействительной, система блокируется.
⚠️ Важно: Никогда не изменяйте файл license.key вручную. Любое изменение нарушит подпись и сделает лицензию недействительной. Для обновления лицензии всегда используйте официальный файл, полученный от вендора.

Аппаратная привязка (HWID)

HWID (Hardware ID) — это уникальный идентификатор сервера, вычисляемый на основе:

  • /etc/machine-id (для Linux) — основной источник.
  • Если файл отсутствует, используется /var/lib/dbus/machine-id.
  • В крайнем случае — серийный номер CPU из /proc/cpuinfo.

Полученное значение хешируется с солью и сохраняется в лицензии. При каждой проверке HWID пересчитывается и сравнивается с сохранённым в payload. Если они не совпадают — лицензия считается недействительной.

ℹ️ Совет: При переносе системы на новый сервер необходимо заменить лицензию. Обратитесь к вендору для получения нового файла с актуальным HWID нового сервера.

Срок поддержки (Support Period)

Лицензия содержит поле expires_at, определяющее, до какой даты действует подписка на обновления и техническую поддержку. Это поле влияет только на доступ к обновлениям, но не блокирует работу ядра системы — базовая функциональность сохраняется даже после истечения срока.

Проверка срока выполняется методом LicenseManager::isSupportActive():

  • Если expires_at отсутствует — поддержка бессрочная.
  • Если текущая дата ≤ expires_at — поддержка активна.
  • Если срок истёк — поддержка неактивна, но ядро продолжает работать.

На странице лицензии отображается количество оставшихся дней до истечения поддержки.

🚨 Критично: Истечение срока поддержки не влияет на работу существующих функций. Однако без подписки вы не сможете получать обновления безопасности и новые версии. Рекомендуем своевременно продлевать поддержку.

Как проверить статус лицензии

Для администраторов с ролью ROLE_ADMIN доступна страница «Лицензия» (обычно по пути /admin/company/license). На ней отображаются:

  • Статус валидности – действительна ли лицензия (подпись + HWID).
  • Тип лицензии (например, «Enterprise Perpetual»).
  • Оставшиеся дни поддержки – сколько дней до истечения expires_at.
  • Маскированный публичный ключ – для идентификации используемой пары ключей.

Если лицензия недействительна, система отобразит соответствующее предупреждение, а доступ к интерфейсу будет ограничен.

Связанные разделы документации