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

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

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

Проблема стандартного механизма авторизации

По умолчанию модуль Диадок для 1С является клиентским приложением. Это означает, что при попытке авторизации или подписания документа код модуля обращается к установленному на локальной машине криптопровайдеру (например, КриптоПро CSP). Криптопровайдер ищет закрытый ключ в локальных хранилищах (реестр Current User, вставленный токен или папка на диске).

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

Решение 1: Использование облачных сертификатов (Контур.DSS)

Самый современный и безопасный метод, не требующий глубокой переработки кода модуля, — это переход на технологию DSS (Digital Signature Service). Рассмотрим подробнее, как это работает:

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

Этот метод полностью исключает возможность компрометации ключа при краже ноутбука или утечке реестра, так как ключа на ноутбуке просто нет.

Решение 2: Реализация серверного подписания в 1С

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

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


// Пример получения ссылки на сертификат из справочника 1С
Функция ПолучитьСертификатИзБазы(Отпечаток) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Сертификаты.Ссылка КАК Ссылка
        |ИЗ
        |   Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты
        |ГДЕ
        |   Сертификаты.Отпечаток = &Отпечаток";
    
    Запрос.УстановитьПараметр("Отпечаток", Отпечаток);
    Результат = Запрос.Выполнить();
    Если Не Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.Ссылка;
    КонецЕсли;
    Возврат Неопределено;
КонецФункции

После получения ссылки на объект СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования, необходимо использовать метод общего модуля ЭлектроннаяПодписьИШифрование.ПодписатьДанные(). При этом в настройках 1С должна быть включена опция «Выполнять подпись на сервере», а сами криптоконтейнеры должны быть установлены в реестр под учетной записью, от которой запущен сервер 1С (обычно USR1CV8).

Решение 3: Разделение прав (авторизация по логину)

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

  1. Сотрудники работают в 1С, заходят в Диадок под логином.
  2. Они видят все входящие/исходящие, могут заполнять реквизиты, сопоставлять номенклатуру.
  3. Ключи устанавливаются только на один-два выделенных терминальных сервера или находятся у ответственного лица (директора, главбуха).
  4. Подписание происходит централизованно.

Это организационное решение позволяет минимизировать количество копий ключей в сети.

Важные технические нюансы и риски

При реализации любого из подходов следует помнить о следующих моментах:

Подведем итог: штатной возможности «просто забирать» ключи из 1С без их наличия в системе (ОС) не существует из-за архитектуры защиты информации. Однако использование Контур.DSS или кастомизация модуля для работы через серверные методы 1С (ЭлектроннаяПодписьИШифрование) позволяют полностью решить задачу безопасной удаленной работы.

← На главную