Как реализовать проверку физического ключа или сертификата при проведении документа в веб-клиенте 1С?

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

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

Архитектурные ограничения веб-клиента и типовые заблуждения

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

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

Общая схема работы механизма проверки

  1. За каждым пользователем в информационной базе закрепляется отпечаток (хэш) или серийный номер его личного сертификата электронной подписи.
  2. В момент нажатия кнопки проведения на стороне веб-клиента формируются данные для проверки (например, строка с ключевыми реквизитами документа или его идентификатор).
  3. Через объект МенеджерКриптографии вызывается процедура асинхронного подписания данных.
  4. Криптопровайдер обращается к аппаратному носителю, запрашивает у пользователя PIN-код к контейнеру ключа (если он задан) и формирует цифровую подпись.
  5. Подпись и открытый сертификат передаются на сервер 1С, где проверяются их валидность и принадлежность текущему пользователю.
  6. При успешной верификации документ проводится, а факт подписи может быть зафиксирован в регистрах сведений.

Технические требования для работы криптографии в веб-клиенте

Чтобы платформа 1С в браузере могла взаимодействовать с криптопровайдером и аппаратными ключами, необходимо выполнить следующие настройки на клиентских местах:

  1. Установить специализированное расширение браузера (Расширение для работы с 1С:Предприятием).
  2. Установить на рабочую станцию криптопровайдер (например, КриптоПро CSP, ViPNet CSP или системный провайдер Microsoft) и драйверы аппаратных токенов (Рутокен, JaCarta, eToken).
  3. В настройках криптографии в информационной базе 1С указать используемый тип провайдера, алгоритмы подписи и хэширования.

Программная реализация подписания и проверки

Разберем по шагам, как написать программный код для подписи документа на клиенте и проверки сертификата на сервере.

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


&НаКлиенте
Асинх Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    
    Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        Отказ = Истина; // Прерываем стандартную запись для выполнения асинхронной проверки
        
        // Получаем строку данных документа для формирования подписи
        ДанныеДляПодписи = ПолучитьДанныеДляПодписиНаСервере();
        ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(ДанныеДляПодписи);
        
        // Инициализируем менеджер криптографии
        Менеджер = Новый МенеджерКриптографии;
        
        Попытка
            // Получаем сертификат текущего пользователя
            Сертификат = Ждать ПолучитьСертификатПользователяАсинх(Менеджер);
            Если Сертификат = Неопределено Тогда
                ПоказатьПредупреждение(, "Не обнаружен персональный сертификат на носителе!");
                Возврат;
            КонецЕсли;
            
            // Выполняем подписание данных закрытым ключом с токена
            Подпись = Ждать Менеджер.ПодписатьАсинх(ДвоичныеДанные, Сертификат);
            
            // Отправляем подпись и сертификат на сервер для валидации и проведения
            РезультатПроверки = ПроверитьИПровестиНаСервере(ДвоичныеДанные, Подпись, Сертификат);
            
            Если РезультатПроверки Тогда
                ПараметрыЗаписи.Вставить("ПроверкаПройдена", Истина);
                ЭтаФорма.Записать(ПараметрыЗаписи);
            Иначе
                ПоказатьПредупреждение(, "Ошибка проверки электронной подписи или несоответствие владельца ключа!");
            КонецЕсли;
            
        Исключение
            ПоказатьПредупреждение(, "Ошибка криптографии: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
    
КонецПроцедуры

Теперь рассмотрим серверную часть, где выполняется проверка соответствия отпечатка сертификата текущему авторизованному пользователю информационной базы:


&НаСервере
Функция ПроверитьИПровестиНаСервере(ДвоичныеДанные, ДанныеПодписи, СертификатКлиента)
    
    Менеджер = Новый МенеджерКриптографии;
    
    // 1. Проверяем математическую корректность подписи
    Попытка
        Менеджер.ПроверитьПодпись(ДвоичныеДанные, ДанныеПодписи, СертификатКлиента);
    Исключение
        Возврат Ложь;
    КонецПопытки;
    
    // 2. Проверяем привязку сертификата к текущему пользователю ИБ
    ОтпечатокСертификата = СертификатКлиента.Отпечаток;
    ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
    
    ОтпечатокВБазе = ПолучитьОтпечатокСертификатаПользователя(ТекущийПользовательИБ);
    
    Если ОтпечатокСертификата <> ОтпечатокВБазе Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Возврат Истина;
    
КонецФункции

Использование готовых механизмов БСП

Если в конфигурации внедрена Библиотека стандартных подсистем (БСП), рекомендуется использовать готовую подсистему ЭлектроннаяПодпись. Она включает в себя:

  1. Справочник сертификатов ключей электронной подписи с привязкой к справочнику Пользователи.
  2. Готовые интерфейсные формы добавления, проверки и выбора сертификатов.
  3. Адаптированные под веб-клиент методы проверки доступности криптопровайдера и установки необходимых плагинов браузера.
  4. Регистры для хранения версий подписанных данных и протоколирования результатов проверки.

Альтернативный вариант: одноразовые пароли (TOTP)

Если развертывание криптопровайдеров и драйверов токенов на рабочих местах сотрудников затруднено технически, в качестве альтернативы можно использовать аппаратные или программные генераторы одноразовых паролей (TOTP / Google Authenticator). При проведении документа система открывает модальное окно запроса 6-значного кода, который генерируется на физическом брелоке сотрудника, и валидирует его на сервере без необходимости взаимодействия браузера с USB-портами.

← На главную