Андрей Смирнов
Время чтения: ~11 мин.
Просмотров: 51

Настройка клиент-серверного подписания электронных документов

На одном из крупных проектов возникла не совсем обычная для 1С задача. Нужно было организовать массовую отправку и подписание документов контрагентов с помощью электронной цифровой подписи. Поиск информации в справочной системе и на 1Сных форумах нужного результата не дал. Пришлось разбираться со средствами криптографии, электронными ключами и сторонними утилитами. Найденное решение оказалось простым и достаточно гибки для повторения в других проектах, поэтому хочу с вами поделиться. Постановка задачи в цифрах: • На предприятии заказчика работает почти 3000 человек в более 50 филиалах по всей России. • На предприятии заказчика используется УПП 1.3 (платформа 8.2.19.76). • Более 10 000 активных контрагентов. • Для большей части контрагентов (покупателей) раз в месяц нужно отправлять документы в электронном виде (Счета, акты, счета-фактуры, РТУ и т.д.). Всего, около 100 000 документов. • На отправку документов выделяется 2 рабочих дня. • В процедуре отправки должно быть задействовано минимальное количество людей. Сейчас их число удалось сократить до 2х человек. • Документы должны отправляться по электронной почте в виде вложенных PDF-файлов. Каждый PDF-файл должен быть подписан ЭЦП. Два слова, что вообще собой представляет ЭЦП. Для подписания и работы с файлами используется два ключа: закрытый и открытый. Закрытый ключ хранится у Вас на токене и используется для подписания или шифрования документов. Открытый ключ должен быть распространен всем пользователям, которые должны работать с подписанным Вами документом. Обычно это происходит автоматически при подписании файла. Далее, есть файл, который нам нужно подписать. С помощью специального ПО из содержания файла и Вашего закрытого ключа создается уникальная символьная последовательность, что-то вроде контрольной суммы. Эта последовательность и есть электронно-цифровая подпись. ЭЦП всегда уникальна для данного пользователя и данного документа. Подпись содержит информацию о дате подписания документа, подписанте, контрольную сумму для подписанного документа и ссылку или сам файл открытого ключа. Подпись может быть добавлена в подписываемый файл или сохранена в виде отдельного файла. Нас, конечно, интересует первый вариант. Как всегда, решение задачи начал с изучения того, что уже есть. Нашлось несколько модулей криптографии и ЭЦП для 1С. Но они не подошли. Как правило, они умеют подписывать или XML-файлы, или сохранять подпись и открытый ключ в отдельный файл. А нам нужно было получить на выходе подписанный PDF-документ, который можно будет просто и удобно просмотреть с помощью того же Adobe Acrobat Reader. Вторым решением было поискать, так называемые, PDF-принтеры – программы, которые умеют сохранять любой документ в виде PDF-файла. Самым подходящим решением оказался BullZip PDF Printer (http://www.bullzip.com/products/pdf/download.php), который в платной версии имеет функцию подписания создаваемых документов. Решение, в принципе, подошло, но появились серьезные бюрократические проблемы с покупкой, согласованием и установкой нового софта на территории предприятия. Пока решение проходило согласование, я обратил внимание на комплект программ КРИПТО-ПРО, который, как правило, поставляется и работает вместе с ключом ЭЦП.

Решение первое, полу-ручное

Подавляющее большинство ключей ЭЦП выпускаются в виде eToken или Rutoken USB-модулей. В моем случае был eToken. Кто не знает, основное отличие состоит в том, что eToken имеет встроенный аппаратный криптографический сопроцессор. Это значит, что при шифровании данных закрытый ключ не покидает токена. В нашем случае эта разница значения не имеет. Не буду рассматривать установку драйверов USB-ключей. Они, как правило, поставляются выпускающим удостоверяющим центром вместе с самими токенами и установка проблем не вызывает. Еще с токенами обычно поставляется лицензия на КРИПТО-ПРО и утилита КриптоПро CSP. Я использовал последнюю доступную на данный момент версию 3.9. Дальше все просто. Запускаем КриптоПро CSP. Закладка Сервис, кнопка Посмотреть сертификаты в контейнере, нажимаем Обзор для выбора токена с криптохранилищем, и выбираем нужно нам хранилице. Обычно на одном токене одно хранилище.52654e1ad43d4e69a5afb205649ded94.png Нажимаем Далее и получаем окошко с информацией по сертификату, к которому привязан ключ. Ждем кнопку Установить и устанавливаем сертификат в хранилище Личное для локального пользователя. Обычно, вместе с утилитой КриптоПро CSP в меню Пуск устанавливается ярлык для оснастки Сертификаты. Запускаем оснастку, убеждаемся, что все правильно сделано и сертификат действительно установился в раздел Личное для текущего пользователя.ad32e3c4cf3d4ace81bda630454118d9.png Дальше, Кликаем правой кнопкой по установленному сертификату, Все задачи, Экспорт. Обязательно отказываемся экспортировать закрытый ключ и сохраняем сертификат куда-нибудь на локальный компьютер, например, на рабочий стол, в формате файла X.509 (.CER) в кодировке DER. Сохраненный сертификат нам понадобиться дальше для выполнения подписи. Последнее, что нам осталось, это скачать с сайта www.cryptopro.ru/downloads утилиту КриптоПро PDF, с помощью которой и будем выполнять подпись PDF-файлов. Работа утилиты крайне проста. Выбираем папку в которой находятся PDF-файлы, выбираем папку в которую будут сохранены файлы с подписью (если это одна и так же папка, в дополнительных настройках нужно установить флажок «Перезаписывать файлы с одинаковыми именами») выбираем из контейнера сертификат, который будем использовать для подписи, вводим пин от ключа и, если все указали правильно, через несколько секунд в папке-приемнике появятся подписанные PDF-файлы. Для того, чтоб ЭЦП признавалась юридически, по закону, должна быть установлена еще метка времени, но мне для задачи это не требовалось. В принципе, все! Если у Вас небольшая организация и пара десятков контрагентов то можно вообще ничего больше не делать и оставить все в ручном режиме. Кроме того, 1С нам пока вообще не была нужна, документы в формате PDF можно создать многими способами, в том числе и из Microsoft Office. Долго не мог разобраться, почему подпись не проходит и выдает ошибку. Оказалось, что успешной работы утилиты КриптоПро PDF на компьютере должна быть установлен Adobe Acrobat Pro (не Reader, это важно!). Именно с его помощью утилита модифицирует PDF-файлы и добавляет и них подпись. Пример подписанного файла на картинке. Выглядит как обычный PDF, только на закладке Подписи появились данные о подписанте. Из важного, указано кто подписал документы (обычно это ФИО и название организации) и что с момента подписания документ не изменялся. Информацию о том, что сертификат ненадежный можно игнорировать. Это говорит только о том, что компания Adobe и ее продукт Acrobat Reader ничего не знают о Вашем сертификате.12edcc0808db41a7b177380f0fda89e4.png

Решение второе, автоматическое

Как писал выше, в моем случае ручное решение не подошло. Контрагентов много, для каждого за месяц создается несколько десятков документов. Их все нужно сохранить в PDF, подписать, отправить одним письмом. Для решения задачи придумали модифицировать и использовать стандартную для многих конфигураций обработку «Групповая обработка справочников и документов». Для самых популярных конфигураций эта обработка или входит в саму конфигурацию или ее можно найти как внешнюю на диске с ИТС. Обработка уже умеет печатать отобранные документы. В последних версиях платформы появился штатный механизм сохранения печатных форм в виде PDF файлов. Осталось совместить эти два механизма и сохранять выбранные пользователем документы в папку на локальном компьютере, а затем запускать командную строку и запускать утилиту КриптоПро PDF для выполнения подписи. Немного доработали интерфейсную часть. Убрали из обработки работу со справочниками. Оставили в интерфейсе 4 вида документов, которые нужно отправлять. Изменили систему отборов. Создали новый регистр сведений Настройки ЭЦП. В него для каждого пользователя сохраняется информация о том, по какому пути лежит КриптоПро PDF на локальном компьютере, папки для временного хранения файлов, сертификат, которым будет выполнена подпись. Еще просили сохранять пин от ключа, но мы не стали этого делать из соображений безопасности. Чтоб автоматизация была уж совсем полной, пришлось в 1С оживить модуль электронной почты. Дальше все просто. Раз в месяц оператор выбирает список контрагентов и виды документов, которые должны быть отправлены, проверяет результат отбора, нажимает кнопку Выполнить, вводит пин-код от ключа и ждет… В моем случае формирование пакета документов может длится несколько часов. Обработка группирует отобранные документы по контрагентам, дальше циклом проходится по каждому контрагенту, выбирает все его документы, сохраняет в виде PDF-файлов на диск, запускает утилиту КриптоПро PDF из командной строки, подписывает сохраненные документы, создает документ Электронное письмо с контактными данными из справочника контрагентов, в качестве вложения прикрепляет подписанные документы из папки на диске, переводит письмо в статус для отправки и переходит к следующему контрагенту. Письма отправляются регламентным заданием раз в 10 минут. Обработку можно оставлять на ночь. Возникшие проблему будут корректно обработаны, а утром пользователь увидит журнал шибок и журнал отправленных писем. Для удобства приведу кусочек кода, который выполняет саму процедуру подписания. Все параметры берутся из созданного регистра сведений.

МассивВходящих = НайтиФайлы(КаталогВходящие, "*.pdf", Ложь); КоличествоФайловВходящие = МассивВходящих.Количество(); Сообщить("Обнаружено " + КоличествоФайловВходящие + " файлов для подписи.");  КоманднаяСтрока = ИмяФайлаКриптоПро + " sign" + " --in-dir=""" + КаталогВходящие + """" + " --out-dir=""" + КаталогИсходящие + """" + " --report-dir=""" + КаталогЛоги + """" + " --err-dir=""" + КаталогОшибки + """" + " --certificate=""" + ИмяФайлаСертификата + """" + " --pin=""" + ПинКод + """" + " --overwrite-files";  ЗапуститьПриложение(КоманднаяСтрока, "", истина);  МассивИсходящих = НайтиФайлы(КаталогИсходящие, "*.pdf", Ложь); КоличествоФайловИсходящие = МассивИсходящих.Количество(); Сообщить("Подписано " + КоличествоФайловИсходящие + " файлов."); 
  • Частые вопросы и ответы

Рассылка техподдержки:

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

1539347888191_01.png

Рис. 1.

1. Проходим на сервере аутентификацию под пользователем, под которым запускается служба «Агент сервера 1С:Предприятия».2. Устанавливаем криптопровайдер.3. Месторасположение контейнеров с закрытыми ключами (реестр, жесткий диск, внешний носитель) может быть любым, с условием, что они доступны пользователю, под которым запускается служба «Агент сервера 1С:Предприятия».4. Устанавливаем личные сертификаты, корневые сертификаты, списки отозванных сертификатов. При этом установку можно проводить «для текущего пользователя» — нет необходимости устанавливать их «для локального компьютера».5. Помечаем в программе 1С галочками пункты «Проверять подписи и сертификаты на сервере» и «Подписывать на сервере» (Администрирование — Обмен электронными документами — Электронная подпись и шифрование — Настройки электронной подписи и шифрования — закладка «Программы»).

Система настроена. Подписание на «клиентах» должно проходить успешно.

При тестировании сертификата на «клиенте» нужно обращать внимание только на корректность прохождения этапов теста на сервере, см. Рис. 2.

1539351338150_02.png

Рис. 2.

Настройка криптопровайдера

Для поддержки работы с квалифицированными сертификатами в среде MS Windows необходимо получить и установить на ПК актуальную версию сертифицированного криптопровайдера. В настоящее время поддерживается работа со следующими программами:

Установка и настройка криптопровайдеров осуществляется в соответствии с технической документацией на эти продукты.

В настройках информационной базы необходимо указать установленный криптопровайдер, для этого перейдите в Настройки электронной подписи и шифрования на вкладку «Программы» и нажмите кнопку «Добавить».

1 фото в статье Сертификат электронной подписи 1С Подпись.png

В выведенном окне выберите из списка криптопровайдер, установленный в Вашей системе и нажмите кнопку «Записать и закрыть».

2 скриншот в теме Сертификат электронной подписи 1С Подпись.png

Запуск Мастера

Для запуска мастера подготовки заявки на СКП необходимо перейти на вкладку «Сертификаты», нажать кнопку «Добавить» и выбрать пункт «Заявление на выпуск сертификата».

3 картинка по вопросу Сертификат электронной подписи 1С Подпись.png

Подготовка заявления на выпуск нового квалифицированного сертификата

Соглашение о присоединении к Регламенту Удостоверяющего центра

На первом шаге Мастера подготовки заявки необходимо принять Соглашение о присоединении к Регламенту Удостоверяющего центра. При необходимости его можно распечатать.

Переход к следующему шагу тут и на последующих шагах осуществляется нажатием кнопки «Далее».

Заполнение реквизитов организации

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

4 изображение в сатье Сертификат электронной подписи 1С Подпись.png

При переходе на следующий шаг выполняется проверка реквизитов на наличие ошибок. В случае их обнаружения будет выдано соответствующее предупреждение.

Указание данных представителя организации

Квалифицированный сертификат ключа проверки электронной подписи организации оформляется на уполномоченное должностное лицо. Необходимо указать его данные, которые будут внесены в СКП и реестр квалифицированных сертификатов Удостоверяющего центра.

5 фото в теме Сертификат электронной подписи 1С Подпись.png

Создание ключа электронной подписи

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

После нажатия кнопки «Далее» будет запущен механизм создания контейнера с ключом электронной подписи средствами криптопровайдера. При необходимости воспользуйтесь технической документацией на этот программный продукт.

После завершения этой процедуры состояние заявления изменится на «Подготовлено».

Подготовка комплекта заявительных документов и отправка заявки в 1С:Подпись

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

Для автоматического прикрепления Вашей заявки к Личному кабинету обслуживающей организации укажите ее ИНН/КПП или выберите организацию из справочника контрагентов. Это позволит сократить срок рассмотрения Вашей заявки.

6 скриншот по вопросу Сертификат электронной подписи 1С Подпись.png

После нажатия кнопки «Далее» заявление будет отправлено. Для приема заявления в обработку должны быть выполнены следующие условия:

  • Заявка оформляется зарегистрированным пользователем ПП 1С. При необходимости на моменте отправки будет предложено подключить программный продукт к Интернет поддержке пользователей, для чего необходимо ввести логин и пароль, который Вы используете на сайте users.v8.1c.ru.
  • На момент отправки заявки в обработку должен быть заключен договор ИТС или подключен один из пакетов сервисов (СтартЭДО или 1С:Подпись). Если это условие не выполняется, то такая заявка автоматически отклоняется и информация об этом отображается при очередном обновлении статуса.

При соблюдении этих условий Вы получите сообщение «Заявление принято для обработки» и состояние заявления изменится на «Отправлено».

Проверка состояния заявления и установка сертификата в контейнер

Для проверки текущего статуса отправленной заявки выберите ее на вкладке «Сертификаты» в Настройках электронной подписи и шифрования и нажмите «Изменить» (F2) в контекстном меню. Нажатием кнопки «Обновить состояние» можно актуализировать ее статус.

По окончании обработки заявки сертификат будет получен и для его установки в контейнер нажмите кнопку «Установить сертификат». В результате статус заявки изменится на «Исполнено».

7 картинка в статье Сертификат электронной подписи 1С Подпись.png

Используемые источники:

  • https://habr.com/post/253681/
  • https://1c-edo.ru/handbook/28/3624/
  • https://1c.5547.ru/info/articles/config/kak-poluchit-sertifikat-elektronnoy-podpisi-s-pomoshhyu-1s-podpis/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации