Принцип
Сервер СЛК разворачивается на сервере компании-разработчика и раздает лицензии всем клиентам (пользователям), которые приобрели защищаемую конфигурацию. СЛК нужен для шифрования/дешифрования закрытого (защищенного) модуля.
Там же, на сервере компании-разработчика работает небольшая конфигурация (назовем ее "Бэк защиты") с опубликованным HTTP-сервисом, через который, собственно, и осуществляется лицензионный контроль использования защищаемой конфигурации.
Код обращения к HTTP-сервису компании-разработчика размещается в закрытом модуле защищаемой конфигурации.
Преимущества механизма
• одного ключа достаточно для лицензирования любого количества клиентов/пользователей;
• пользователю не нужно устанавливать сервер СЛК у себя, нужен только доступ в Интернет;
• удобно управлять лицензиями: можно оперативно подключить/отключить клиента, дать тестовый доступ, ограничить функционал в зависимости от вида лицензии (по типу ПРОФ, КОРП и т. п.);
• несложно реализовать политику лицензирования по количеству одновременных сеансов, количеству устройств, на которых установлена конфигурация и т. п.;
• можно получать данные о платформе, используемой версии конфигурации и т. д., что очень помогает при расследовании инцидентов;
• можно собирать статистику использования конфигурации.
В общем, возможности ограничены только фантазией и здравым смыслом.
Последовательность действий
1. Связаться с разработчиками СЛК, приобрести ключ, получить комплект разработчика.
Следует отметить, что поддержка разработчиков СЛК грамотная и отзывчивая, документация добротная. Имеется демонстрационная конфигурация. Поэтому опишу процесс концептуально.
Рабочий шаблон "Бэка защиты", пример защищаемой конфигурации и обработка для создания защищенного файла данных содержится в прилагаемом к статье архиве.
2. Установить сервер СЛК. Активировать ключ.
3. Установить конфигурацию "Бэк защиты" и опубликовать HTTP-сервис Back на веб-сервере. Запомнить имя публикации. В пользовательском режиме создать пользователя с именем, например, "front" и полными правами. Ввести для него пароль. Под этим пользователем клиенты будут подключаться к сервису.
4. В защищаемую конфигурацию добавить объекты подсистемы Поддержка (в прилагаемом примере имеют префикс "w").
Кроме того, в защищаемую конфигурацию нужно добавить серверный модуль wЗакрытый, в котором будем размещать защищаемые процедуры. Модуль wЗакрытый в подсистему Поддержка включать не следует, т. к. он не должен входить в поставку конфигурации.
5. Выбрать модуль/модули или отдельные процедуры, которые будем закрывать. Они должны быть серверными. Скопировать защищаемые процедуры в модуль wЗакрытый. В исходных экспортных процедурах тело заменить на вызовы вида:
wСЛК.wЗакрытый().ИмяЗащищаемойПроцедуры();
В прилагаемой конфигурации для примера защищается общий модуль РегламентныеЗаданияАгрегатов.
В модуле wЗакрытый в функции ПолучитьПараметрыКлиентаИзСервисаРазработчика() прописать имя публикации (см. п. 3). В функции ПолучитьСоединениеССервисомРазработчика() прописать URL и порт сервиса, имя и пароль пользователя (см. п. 3).
6. В модуле wСЛК в функции ПолучитьПараметрыСвязи() прописать адрес и порт сервера СЛК. В функции Серия() прописать серию ключа.
7. В общий макет wКомпонентаСЛК (тип "Двоичные данные") загружаем zip-архив компоненты. Файл архива с компонентой в комплекте разработчика имеет вид licenceaddin-{%version%}-template.zip.
8. Делаем собственно макет с защищенным кодом wОбъектыСЛК. Для этого создаем внешнюю обработку wЗакрытый.epf (имя может быть любое). В начало модуля внешней обработки вставляем код предопределенных процедур (описаны в документации и представлены в демо СЛК). Ниже вставляем наш защищаемый код из общего модуля wЗакрытый. Сохраняем обработку.
Открываем редактор файлов СЛК - licenceedit. Редактор СЛК 3.0 может работать без ключа защиты – создание файлов данных выполняется при помощи открытого ключа разработчика, поставляемого в комплекте разработчика для конкретной серии ключей в виде текстового файла вида {%Серия%}.cryptkey.
В консольной утилите выбираем ключ, созданную внешнюю обработку wЗакрытый.epf и результирующий файл с зашифрованными данными ({%Серия%}.datafile) и нажимаем "Создать":
Полученный файл {%Серия%}.datafile загружаем в общий макет wОбъектыСЛК.
9. В защищаемой конфигурации для включения/отключения функциональности в зависимости от наличия лицензии используем функции wСЛКПовтИсп.ЗащищенныйМодульПодключен() и wСЛКПовтИсп.ЛицензияРазработчикаПолучена(). Поскольку модуль wСЛКПовтИсп является открытым, то включение/отключение функциональности нужно дублировать в закрытом модуле.
10. Создаем поставку нашей конфигурации. Модуль wЗакрытый в поставку не включаем!
Что в результате
1. Клиент приобретает нашу конфигурацию. Мы в "Бэке защиты" заводим нового клиента и добавляем запись в регистр Поддержка:
Рег. номер генерируется при записи в формате Год|Месяц|Дата|[Номер по порядку] (рассчитываем на то, что нашу конфигурацию будут покупать 9999 клиентов ежедневно).
Можно ввести количество дней доступа. Отсчет будет вестись от момента первого обращения клиента к сервису. Это удобно для предоставления тестового периода.
2. Клиент устанавливает нашу конфигурацию, открывает форму "Подключение поддержки", вводит рег. номер, код доступа и подключается.
3. Мы в бэке видим обращение клиента к сервису защиты:
В конфигурации "Бэк защиты" имеется рег. задание для очистки регистра "Обращения к сервису" с установкой периода хранения записей.
Конфигурация тестировалась на платформе 8.3.12.1714.
Представленная конструкция реализована в трех наших интеграционных решениях. Показала себя с положительной стороны.
Успешной защиты и продаж!