Как заставить тонкий клиент 1С, работающий через веб-сервер, использовать программную лицензию вместо аппаратного HASP-ключа?

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

В работе с инфраструктурой 1С часто возникают нетривиальные задачи по управлению лицензиями. Рассмотрим распространенный сценарий: в локальной сети есть сервер с аппаратным ключом HASP и сервер 1С, а на другом компьютере развернут веб-сервер (IIS) с опубликованной файловой базой и активированной многопользовательской программной лицензией. Проблема заключается в том, что тонкие клиенты, подключаясь к файловой базе через веб-сервер, упорно получают лицензию с сетевого аппаратного ключа, игнорируя локальную программную. Разберемся, почему так происходит и как заставить систему использовать нужный тип лицензии.

Анализ ситуации: почему 1С выбирает аппаратный ключ?

Чтобы понять корень проблемы, необходимо знать, в каком порядке платформа «1С:Предприятие» ищет лицензии. В нашем случае, когда тонкий клиент подключается к базе через веб-сервер, "клиентом" для системы лицензирования выступает не сам тонкий клиент, а модуль расширения веб-сервера. Именно он запрашивает лицензию для каждого нового сеанса. Алгоритм поиска выглядит следующим образом:

  1. Поиск по кэшу. Система в первую очередь пытается получить лицензию из того же источника (файл или ключ HASP), откуда она была успешно получена в прошлый раз. Информация об этом кэшируется. Если модуль веб-сервера однажды "нашел" сетевой HASP-ключ, он будет обращаться к нему снова и снова.
  2. Поиск локальных лицензий. Если в кэше нет информации или предыдущий источник недоступен, начинается новый поиск. Первым делом модуль ищет активированные программные лицензии на том же компьютере, где он запущен (т.е. на веб-сервере).
  3. Поиск локального HASP-ключа. Если программные лицензии не найдены, происходит поиск аппаратного ключа, установленного непосредственно в USB-порт веб-сервера.
  4. Поиск сетевого HASP-ключа. В последнюю очередь система начинает поиск многопользовательского HASP-ключа в локальной сети с помощью службы HASP License Manager.

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

Попытка решения через nethasp.ini и его последствия

Первая мысль системного администратора — запретить веб-серверу искать ключи в сети с помощью конфигурационного файла nethasp.ini. Этот файл как раз и предназначен для управления поиском сетевых HASP-ключей на стороне клиента. Например, можно создать файл nethasp.ini со следующим содержимым, чтобы отключить все сетевые протоколы поиска:


[NH_COMMON]
NH_IPX = Disabled
NH_NETBIOS = Disabled
NH_TCPIP = Disabled

[NH_TCPIP]
NH_USE_BROADCAST = Disabled

Однако, как показала практика, этот метод не сработал для модуля веб-сервера. Он продолжал получать лицензию с аппаратного ключа. Более того, в ходе обсуждения вскрылась главная проблема, которая делает этот и подобные подходы неработоспособными: программная лицензия была активирована с привязкой к аппаратному ключу HASP.

Это критически важный момент. Такая привязка означает, что для проверки валидности программной лицензии системе необходим постоянный доступ к тому аппаратному ключу, к которому она привязана. Как только доступ к HASP-ключу блокируется (например, настройками в файле nhsrv.ini на сервере с ключом или сетевыми правилами), программная лицензия также перестает работать. Возникает замкнутый круг: чтобы избавиться от аппаратной лицензии, мы блокируем к ней доступ, но тем самым отключаем и привязанную к ней программную. Результат — ошибка "Лицензия не найдена".

Решение №1: Использование файла 1cestart.cfg (Рекомендуемый способ)

Наиболее правильный и современный способ запретить платформе 1С использовать аппаратные ключи — это настройка файла 1cestart.cfg. Этот метод более надежен, чем манипуляции с nethasp.ini, так как действует на уровне самой платформы.

Важно: этот способ сработает только в том случае, если у вас есть независимая программная лицензия, не привязанная к аппаратному ключу.

Выполним настройку по шагам:

  1. На компьютере, где установлен веб-сервер (IIS), найдите каталог установки платформы «1С:Предприятие». Нас интересует подкаталог bin\conf конкретной версии, например: C:\Program Files\1cv8\8.3.20.1234\bin\conf.
  2. В этом каталоге создайте (если его нет) или отредактируйте текстовый файл с именем 1cestart.cfg.
  3. Добавьте в него одну строку: UseHwLicenses=0
  4. Сохраните файл. Этот параметр полностью отключает для всех компонентов платформы на данном компьютере поиск любых аппаратных лицензий — как локальных, так и сетевых.
  5. Обязательно перезапустите службу веб-сервера, чтобы изменения вступили в силу. Для IIS это можно сделать через диспетчер служб IIS или командой iisreset в командной строке, запущенной от имени администратора.

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

Решение №2: Активация независимой программной лицензии

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

  1. Обратитесь к поставщику для получения нового комплекта пин-кодов для программной лицензии.
  2. При активации новой лицензии на веб-сервере не указывайте привязку к аппаратному ключу. Лицензия будет привязана к уникальным параметрам "железа" самого веб-сервера.
  3. После успешной активации независимой лицензии настоятельно рекомендуется применить Решение №1 (добавить UseHwLicenses=0 в 1cestart.cfg). Это создаст полностью изолированную и предсказуемую среду, в которой веб-сервер гарантированно будет использовать только свою локальную программную лицензию и никогда не будет "смотреть" в сторону аппаратных ключей в сети.

Дополнительные важные сведения

Очистка кэша лицензий

Как уже упоминалось, 1С кэширует информацию о последней полученной лицензии. Чтобы сбросить этот кэш и заставить систему выполнить поиск "с чистого листа", простого перезапуска веб-сервера может быть недостаточно. В сложных случаях может потребоваться очистка служебных каталогов платформы, например, содержимого папки C:\ProgramData\1C\1cv8\srvinfo на сервере.

Особенности потребления лицензий через веб-сервер

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

Порядок поиска файла nethasp.ini

Хотя в данном случае nethasp.ini оказался неэффективен, в других ситуациях он может быть полезен. Для справки, вот порядок, в котором система ищет этот файл в ОС Windows:

  1. Каталог bin\conf конкретной версии платформы.
  2. Каталог профиля пользователя: %LOCALAPPDATA%\1C\1cv8\conf.
  3. Каталог, указанный в файле conf.cfg.
  4. Общий для всех пользователей каталог: %ALLUSERSPROFILE%\1C\1cv8\conf.
  5. Каталог с исполняемыми файлами платформы (bin).
  6. Системные каталоги Windows (%SYSTEMROOT%\System32, %SYSTEMROOT% и т.д.).
  7. Каталоги, перечисленные в системной переменной окружения PATH.

Понимание этих нюансов поможет вам гибко и точно управлять лицензированием в сложных инфраструктурах 1С.

← На главную