В данной статье рассматривается решение проблемы доступа к хранилищу сертификатов на операционных системах семейства 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С.
Здравствуйте!
ОтветитьУдалитьИспользую веб-сервисы и опубликованную базу на IIS.
Не могу получить хранилище сертификатов:
Ошибка при вызове метода контекста (ПолучитьХранилищеСертификатов): Ошибка при открытии хранилища сертификатов (0x00000005).
Подскажите, пожалуйста, что можно сделать?
пользователю iusr дать доступ к хранилищу сертификатов
УдалитьНе получается( Уточните к какому именно хранилищу..
УдалитьЦитата из документации ИТС: "необходимо предоставить доступ к хранилищу сертификатов пользователю, от имени которого работает web-сервер" И всё на этом. Какой пользователь, какое хранилище???
Удалить