Автоматизация процесса определения причины блокировки ключа клиента

Автоматизация процесса определения причины блокировки ключа клиента


В ситуации, когда у клиента по той или иной причине заблокировался ключ (сменилось железо на ПК и т.д.), можно посредством запроса Decode C2V из EMS Web Service API получить от сервера Sentinel EMS расшифрованный *.c2v файл и показать клиенту причину блокировки ключа (указать, какое именно оборудование сменилось и/или к какому оборудованию “привязан” ключ). 

Пример реализации:

В защищаемую программу добавляем функцию, которая будет выполняться в случае, если у клиента, при попытке открытия сессии с его ключом, была возвращена ошибка вида:
  • Error code: 5 - AccessDenied
  • Error code: 24 - InvalidTime
  • Error code: 45 - TimeError
  • Error code: 47 - CorruptStorage
  • Error code: 52 - HardwareModified
  • Error code: 64 - CloneDetected
  • Error code: 66 - HaspInactive
  • Error code: 72 - CannotReadFile
  • Error code: 78 - SecureStoreIdMismatch
  • Error code: 83 - HaspDisabled
Разумеется, на ПК требуется наличие подключения к интернету. Функция должна реализовывать следующую логику:
1) Выполнение сбора данных (C2V файла) с заблокированного HL/SL ключа клиента, (функция Hasp.GetInfo из Sentinel Licensing API).

Пример кода вызова функции:
//
string scope =
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
"<haspscope>" +
" <hasp id=\\" + KeyID + "\" />" + // KeyID нужно заменить на Key ID того ключа, для которого необходимо проверить обновления
"</haspscope>" +
"";
string format =
"<haspformat format=\"updateinfo\"/>";
string vendorCode = “Ваш_Vendor_Code”;
string info = null;
HaspStatus status = Hasp.GetInfo(scope, format, vendorCode, ref info);
if (HaspStatus.StatusOk != status)
{
//handle error
}
//

2) Получив C2V с ключа, необходимо выполнить один POST запрос target.ws из Sentinel EMS Web Service API

В качестве параметра в запрос необходимо передать в параметре C2V, данные, полученный в результате выполнения функции Hasp.GetInfo из Sentinel Licensing API, а в параметре action требуется передать значение “Read ”.
3) Полученный в ответ на запрос массив данных будет содержать XML или JSON структуру с расшифрованным C2V, пример:
//
<?xml version="1.0" encoding="UTF-8"?>
<ProtectionKey>
<ProtectionKeyOutput>
<C2V>
<sentinel_ldk_info>
<key>
<id>...</id>
<type>...</type>
<update_counter>...</update_counter>
<vendor>
<id>...</id>
<name>...</name>
</vendor>
<configuration_info>
<system_fingerprint>
<raw_data>...</raw_data>
<fingerprint_info>
<criteria>
<name>cpu</name>
<value>2346217999</value>
</criteria>
<criteria>
<name>mainboard</name>
<value>2308647388</value>
</criteria>
</fingerprint_info>
...
</system_fingerprint>
<reference_fingerprint>
<fingerprint_control_type>ISV Managed</fingerprint_control_type>
<raw_data>...</raw_data>
<fingerprint_info>
<criteria>
<name>cpu</name>
<value>2346217968</value>
</criteria>
<criteria>
<name>mainboard</name>
<value>2308647382</value>
</criteria>
</fingerprint_info>
</reference_fingerprint>
<fridge_version>...</fridge_version>
<vlib_version>...</vlib_version>
</configuration_info>
<clone_detected>Yes\No</clone_detected>
...
<product>
<id>...</id>
<name>...</name>
<feature>
<id>...</id>
<name>...</name>
<license_properties>
<perpetual/>
<concurrency>
<count>Unlimited</count>
<count_criteria>Per Station</count_criteria>
<network_access>No</network_access>
<detachable>No</detachable>
</concurrency>
<remote_desktop_access>No</remote_desktop_access>
<virtual_machine_access>Yes</virtual_machine_access>
</license_properties>
<detach_license_count>0</detach_license_count>
<locked>Yes</locked>
</feature>
...
</product>
<need_force>false</need_force>
</key>
...
</sentinel_ldk_info>
</C2V>
</ProtectionKeyOutput>
</ProtectionKey>
//
В этой структуре будет содержаться два тега с данными: 
  • system_fingerprint - текущий набор аппаратных характеристик ПК;
  • reference_fingerprint - набор аппаратных характеристик ПК, к которымбыл “привязан” SL ключ при первоначальной активации.
Далее можно обработать полученные данные и вывести их клиенту, в удобном разработчику виде.
*!ВАЖНО!*: следует учитывать, что схема привязки указывается не для всего ключа в целом, а может быть своя для каждого продукта в ключе (определяется на этапе создания продукта в Sentinel EMS). То есть
возможна ситуация, когда в ключе клиента есть например два продукта:
- Product #1 - имеет схему привязки PMType1 (привязка к HDD и Motherboard);
- Product #2 - имеет схему привязки FQDN (привязка к полному доменному имени ПК).
Если при этом на ПК сменить железо (например HDD и Motherboard), то Product #1 заблокируется с пометкой Cloned (при попытке выполнить логин на Feature ID в этом продукте будет возвращаться ошибка с кодом: 64 - CloneDetected). А вот Product #2 НЕ заблокируется и продолжит работать, так как его параметр привязки (полное доменное имя ПК) не изменился.