Как организовать сервер лицензирования и защиту для своего программного продукта на базе 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Создание тиражного решения на платформе 1С неизбежно ставит перед разработчиком вопрос: как защитить свои интеллектуальные права и гарантировать оплату лицензий? В отличие от многих других языков программирования, 1С поставляется с открытым или частично закрытым исходным кодом, что упрощает несанкционированное копирование. В данной статье мы проанализируем опыт ведущих разработчиков и разберем основные стратегии создания сервера лицензирования и механизмов защиты программного обеспечения.

Вариант 1: Использование промышленного стандарта — 1С:СЛК

Наиболее надежным и легальным способом для экосистемы 1С является использование СЛК (Системы лицензирования и защиты конфигураций). Это совместный продукт фирмы «1С» и компании «Катран Софт». Рассмотрим подробнее, как работает эта система:

  1. Защита модулей: СЛК позволяет не просто проверять наличие лицензии, но и исполнять ключевые части вашего кода в зашифрованном виде. Это означает, что даже если злоумышленник получит доступ к конфигурации, он не увидит алгоритмы, вынесенные в защищенные модули.
  2. Типы лицензий: Система поддерживает как аппаратные ключи (USB), так и программные привязки к параметрам сервера (процессор, материнская плата, HDD).
  3. Интеграция: Разработчику предоставляется специальный дистрибутив, включающий компоненты для встраивания в конфигурацию и консоль управления лицензиями.

Проанализируем техническую сторону: при использовании СЛК программа обращается к локальному или удаленному серверу лицензирования. Если сервер не отвечает или лицензия исчерпана, зашифрованные методы просто не вернут результат, что приведет к неработоспособности защищенного функционала.

Вариант 2: Самописная система на базе внешних компонент (ВК) и микросервисов

Если стандартное решение СЛК кажется избыточным или дорогим, разработчики часто прибегают к созданию собственной архитектуры. Разберем по шагам, как организовать такую систему:

1. Клиентская часть (Внешняя компонента):
Использование встроенного языка 1С для проверки лицензии неэффективно, так как проверку легко «закомментировать». Поэтому логику проверки выносят во внешнюю компоненту (Native API или COM), написанную на C++, C# или Go. Внешняя компонента собирает уникальный идентификатор оборудования (HWID), комбинируя серийные номера компонентов ПК и «соль» (секретную строку).

2. Серверная часть (Backend):
Для обработки запросов от тысяч клиентов требуется производительный сервер. Рассмотрим два основных подхода:

Посмотрим на пример простейшего HTTP-сервиса на стороне сервера 1С:


Функция ПроверитьЛицензию(Запрос)
    
    ДанныеЗапроса = Запрос.ПолучитьТелоКакСтроку();
    // Дешифруем данные, полученные от клиента
    СтруктураЛицензии = ДешифроватьДанные(ДанныеЗапроса); 
    
    ЗапросБД = Новый Запрос;
    ЗапросБД.Текст = "ВЫБРАТЬ Статус ИЗ РегистрСведений.Лицензии ГДЕ Ключ = &Ключ";
    ЗапросБД.УстановитьПараметр("Ключ", СтруктураЛицензии.Ключ);
    
    Результат = ЗапросБД.Выполнить();
    Если Результат.Пустой() Тогда
        Возврат Новый HTTPСервисОтвет(403); // Лицензия не найдена
    Иначе
        Возврат Новый HTTPСервисОтвет(200); // Лицензия активна
    КонецЕсли;

КонецФункции

Механизм «Асинхронной проверки» и защиты от отключения интернета

Одной из главных проблем является риск «падения» интернета у клиента. Если программа будет закрываться мгновенно при потере связи, это вызовет гнев пользователей. Рассмотрим правильный алгоритм «мягкой» проверки:

  1. Linger Time (Льготный период): При запуске программа проверяет наличие локального зашифрованного ключа. Если интернет доступен, она обновляет «дату последней проверки» на сервере.
  2. Фоновая проверка: Выясним, как реализовать асинхронность. В 1С это делается через ФоновыеЗадания. Раз в несколько часов запускается задание, которое «стучится» на сервер.
  3. Grace Period: Если сервер недоступен, программа позволяет работать пользователю еще 3–7 дней. При этом каждый день выводится предупреждение: «Лицензия не подтверждена, осталось 2 дня до блокировки».
  4. Kill-switch (Блокировка): Если срок истек, программа не просто «схлопывается», а переходит в режим «Только просмотр» или блокирует запись новых документов, вызывая исключение в критически важных модулях.

Криптография и безопасность передачи данных

Проанализируем ситуацию: что мешает хакеру подменить адрес вашего сервера в файле hosts на свой локальный адрес и всегда возвращать «OK»? Для защиты от этого необходимо использовать асимметричное шифрование (RSA):

Также важно использовать Certificate Pinning — жесткую привязку отпечатка SSL-сертификата внутри кода ВК, чтобы исключить перехват трафика через прокси-серверы.

Альтернативные инструменты: КЗК2 и аппаратные ключи

Помимо СЛК, существуют проверенные временем инструменты, такие как КЗК2 (Куликовская защита конфигураций). Она позволяет скомпилировать модули 1С в байт-код, который исполняется через специальную внешнюю компоненту. Это отличный баланс между ценой и надежностью для небольших тиражных решений.

Для высокобюджетных Enterprise-решений до сих пор актуальны аппаратные ключи (например, Guardant или Sentinel). Их преимущество в том, что алгоритм защиты зашит в чип самого USB-токена, и его практически невозможно эмулировать программно.

Резюме и практические советы

Подводя итог, выделим основные правила создания надежной системы лицензирования:

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

← На главную