При настройке коллективной работы с сертификатом электронной подписи (ЭЦП) на сервере 1С часто возникает ситуация: криптопровайдер (например, КриптоПро CSP) активирован на сервере, контейнер закрытого ключа установлен под сервисной учетной записью usr1cv8, флаги «Подписывать на сервере» и «Проверять на сервере» включены, но при удалении сертификата с клиентского компьютера подписание перестает работать. Разберем по шагам архитектуру криптографии в 1С, выясним причину такого поведения и рассмотрим корректные варианты настройки.
Чтобы понять логику работы платформы и конфигураций на базе БСП (1С:ЗУП, 1С:ERP, 1С:КА, 1С:БП), разделим процесс на два независимых слоя:
1cv8c.exe) или внутри рабочего процесса сервера 1С (rphost.exe).Следовательно, связь между клиентом и сервером работает по принципу логического «И» (AND): клиент отвечает за отображение и выбор сертификата, а сервер — за доступ к закрытому ключу и расчет подписи.
Проанализируем состояние серверной криптографии с помощью встроенного языка 1С. Для этого выполним серверную процедуру во внешней обработке от имени обычного пользователя.
Для проверки списка сертификатов, которые видит процесс rphost, используем объект МенеджерКриптографии:
&НаСервере
Функция ПолучитьСертификатыСервера()
// Для КриптоПро ГОСТ Р 34.10-2012 (256 бит) тип 80
ИмяПровайдера = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider";
ТипПровайдера = 80;
Менеджер = Новый МенеджерКриптографии(ИмяПровайдера, "", ТипПровайдера);
Хранилище = Менеджер.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты);
Возврат Хранилище.ПолучитьВсе();
КонецФункции
Если вы используете методы подсистемы БСП, аналогичный опрос выполняется через вызовы общих модулей:
&НаСервере
Функция СертификатыНаСервереБСП()
Если Не ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда
Возврат Неопределено;
КонецЕсли;
МенеджерКриптографии = ЭлектроннаяПодпись.МенеджерКриптографии("", Ложь);
Если МенеджерКриптографии = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ХранилищеСертификатовКриптографии = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты);
МассивСертификатов = ХранилищеСертификатовКриптографии.ПолучитьВсе();
СписокВозврата = Новый СписокЗначений;
ТекущаяДата = ТекущаяДатаСеанса();
Для Каждого Сертификат Из МассивСертификатов Цикл
Если Сертификат.ДатаОкончания < ТекущаяДата Тогда
Продолжить;
КонецЕсли;
ПредставлениеСертификата = ЭлектроннаяПодпись.ПредставлениеСертификата(Сертификат);
ОтпечатокСертификата = Base64Строка(Сертификат.Отпечаток);
СписокВозврата.Добавить(ОтпечатокСертификата, ПредставлениеСертификата);
КонецЦикла;
Возврат СписокВозврата;
КонецФункции
Обратите внимание: метод ПолучитьВсе() считывает только открытую часть сертификатов. Присутствие сертификата в списке не гарантирует, что сервер имеет доступ к его закрытому ключу. Чтобы проверить реальную возможность подписи, выполним тестовое вычисление на сервере:
&НаСервере
Функция ТестПодписанияНаСервере(Сертификат)
МенеджерКриптографии = ЭлектроннаяПодпись.МенеджерКриптографии("", Ложь);
Попытка
ДанныеДляПодписи = ПолучитьДвоичныеДанныеИзСтроки("Тестовая строка проверки");
Подпись = МенеджерКриптографии.Подписать(ДанныеДляПодписи, Сертификат);
Возврат "Успешно. Размер подписи: " + Подпись.Размер() + " байт";
Исключение
Возврат "Ошибка подписания: " + ОписаниеОшибки();
КонецПопытки;
КонецФункции
Разберем правильный порядок действий для организации работы пользователей с серверным сертификатом без переноса закрытых ключей на рабочие станции:
Local Machine) либо в личное хранилище сервисной учетной записи, от имени которой запущена служба сервера 1С (обычно usr1cv8). Сервисному пользователю выдаются полные права на ветку реестра с ключами КриптоПро (HKLM\SOFTWARE\Crypto Pro\Settings\Users\<SID>\Keys)..cer (без закрытого ключа)..cer импортируется в хранилище «Личное» (Personal) каждого пользователя тонкого клиента. Так как открытый ключ не содержит секретных данных, это безопасно и не требует лицензий криптопровайдера на локальных ПК при работе через сервер..cer.Рассмотрим специфику взаимодействия с государственными органами в конфигурациях ЗУП и БП: