Как я могу достаточно разумно проверить лицензию на функцию? - PullRequest
0 голосов
/ 03 июля 2019

Положение

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

Проблема

Нам необходимо исключить возможность активации функций, не предусмотренных договорами (и оплаченными) с клиентом. Для нас это сводится к блокировке файла определения функции, так что он не может быть возиться с.

Технические данные

На данном этапе нам нужна только проверка в автономном режиме, без сервера лицензирования или онлайн-проверок.

Приложение имеет традиционную архитектуру сервер-клиент, сервер написан на C ++, клиент - это веб-сайт, который общается с сервером через HTTPS. Все наши клиенты используют Windows Server (разных винтажов). Мы используем Atlassian Bamboo для CI и в качестве сервера сборки для сборки пакетов установки MSI с WIX.

Никто в команде не имеет никакого опыта в криптографии, кроме использования библиотеки OpenSSL для TLS и наличия наших собственных ЦС для разработки и развертывания. Мы не знаем, что доступно, например, из Windows, это поможет или даже предназначено для этой задачи.

Юридические данные

Все наши нынешние клиенты играют хорошо и очень готовы к сотрудничеству. Большинство наших клиентов находятся в Германии, все они в Европе (на данный момент), подпадают под хорошую правовую систему (которая является основным рычагом в этом, лицензирование функции является вторичным). Нам нужно реализовать лицензирование функций в основном для галочки, чтобы избежать возможных неприятных сюрпризов в будущем. Мы не проводим аудит у наших клиентов.

Наша текущая идея

Наша текущая идея состоит в том, чтобы либо зашифровать или подписать файл функции нашим закрытым ключом (по аналогии с подписью сообщения PGP), включить наш открытый ключ в саму программу и проверить подпись / расшифровать файл лицензии при запуске. Мы знаем о возможности изменения открытого ключа в двоичном файле программы и повторного шифрования нового файла лицензии. На сегодняшний день это выходит за рамки сложности наших клиентов, за исключением возможного сценария использования готового программного обеспечения, которое сможет сделать это простым и удобным для пользователя способом.

Вопрос

Имеет ли наш подход смысл? Или есть какой-то стандартный способ сделать это, которого мы не смогли найти?

1 Ответ

1 голос
/ 08 июля 2019

Учитывая то, что вы описали, я думаю, что ваш подход обоснован. Я использовал аналогичный подход для кодирования основных функций лицензии в лицензионный ключ, подписанный закрытым ключом, тогда как соответствующий открытый ключ поставляется вместе с самим комплектом приложений. Для клиентов «в сети» я проверяю ключи на сервере лицензий и получаю оттуда обновленные функции лицензии, но для клиентов, которые запускают продукт в «автономном» режиме, включенные функции основаны только на содержимом данных лицензии.

Преимущество решения "сервер лицензий" заключается в том, что установки с подключением к Интернету можно обновлять немедленно, не предоставляя новую лицензию (или новый файл функций в вашем случае).

Несмотря на то, хотите ли вы использовать существующее решение или нет, вам следует взглянуть на то, что там доступно - один пример - решение SoftwareKey .

...