Открываем доступ пользователю к хранилищу сертификатов локального компьютера

В данной статье рассматривается решение проблемы доступа к хранилищу сертификатов на операционных системах семейства Windows!

В библиотеке стандартных подсистем (БСП), начиная с версии 2.3, реализован мощный программный интерфейс для работы с криптографическими операциями. Выполнение криптографических операций требует обращение к хранилищу сертификатов, где хранится информация о сертификатах, установленных на компьютере. В момент программного обращения к хранилищу сертификатов, с целью получения информации о сертификате, может возникнуть ошибка доступа. Данная ошибка возникает по причине отсутствия необходимых прав у пользователя ОС к хранилищу сертификатов.

ОС Windows сертификаты хранит в двух основных хранилищах, которые подразделяются на вложенные хранилища. Основные хранилища:
  • Хранилище локального компьютера - содержит сертификаты, доступ к которым осуществляется выполняющимися на компьютере процессами;
  • Хранилище текущего пользователя - интерактивные приложения обычно помещают сертификаты в это хранилище для текущего пользователя компьютера.
На практике, у разработчика на платформе 1С, ошибка доступа к хранилищу сертификатов может возникнуть в случае, когда выполняются следующие условия:
  • Используется клиент-серверный вариант работы;
  • Криптографическая операция выполняется на сервере;
  • Сертификат электронной подписи (ЭП) установлен в хранилище локального компьютера (см. рисунок 1);
Рисунок 1. Локальное хранилище сертификатов
Текст ошибки будет звучать как-то так:
Ошибка доступа к хранилищу сертификатов (0x00000005)

Рассмотрим решение проблемы для вышеописанного случая. Что бы исправить ошибку, первым делом, необходимо выяснить, от имени какого пользователя ОС выполняется программное обращение к хранилищу сертификатов. Так как криптографическая операция выполняется на сервере, то это пользователь, от имени которого работает служба агента сервера 1С:Предприятия (обычно это локальный пользователь USR1CV8). Запускаем оснастку "Редактор реестра" (командная строка --> regedit.exe). В реестре содержится два узла, отвечающих за каждое основное хранилище:
  • HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates (Сертификаты - текущий пользователь)
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates (Сертификаты (локальный компьютер))
Вызываем контекстное меню для узла, отвечающего за хранилище локального компьютера и открываем его разрешения (см. рисунок 2). На вкладке безопасность добавляем пользователя сервера 1С и даем ему полный доступ.
Рисунок 2. Разрешения локального хранилища сертификатов
Плюсы использования криптографических операций на стороне сервера:
  • хранение сертификатов пользователей в одном месте;
  • хранение корневых сертификатов (сертификаты удостоверяющего центра) (см. рисунок 3) в одном месте, что позволяет избежать ошибки: цепочка сертификатов обработана, но прервана на корневом сертификате, который не является доверенным (см. рисунок 4);
  • достаточно установить криптопровайдер (КриптоПро, VipNet) только на сервере (экономия денег на клиентских лицензиях при большом количестве клиентских мест).
Рисунок 3. Путь сертификации
Рисунок 4. Ошибка проверки электронной подписи
На самом деле, не обязательно хранить сертификаты в локальном хранилище компьютера, можно запустить сеанс работы с сервером от имени пользователя, под которым работает агент сервера 1С и устанавливать сертификаты в хранилище текущего пользователя. Такое хранение сертификатов предусмотрено во всех типовых решениях фирмы 1С.

Комментарии

  1. Здравствуйте!
    Использую веб-сервисы и опубликованную базу на IIS.
    Не могу получить хранилище сертификатов:
    Ошибка при вызове метода контекста (ПолучитьХранилищеСертификатов): Ошибка при открытии хранилища сертификатов (0x00000005).
    Подскажите, пожалуйста, что можно сделать?

    ОтветитьУдалить
    Ответы
    1. пользователю iusr дать доступ к хранилищу сертификатов

      Удалить
    2. Не получается( Уточните к какому именно хранилищу..

      Удалить
    3. Цитата из документации ИТС: "необходимо предоставить доступ к хранилищу сертификатов пользователю, от имени которого работает web-сервер" И всё на этом. Какой пользователь, какое хранилище???

      Удалить

Отправить комментарий