Подписать документ присоединенной ЭП
ЭП защищает документ от изменений, подтверждает авторство и гарантирует конфиденциальность информации. Поэтому электронная торговая площадка или контрагент могут запросить файл, подтвержденный электронной подписью.
Чтобы создать документ с присоединенной ЭП, можно использовать различные программы. Для электронного письма — почтовый клиент, для документов в форматах *.doc, *.docx — Word, для pdf-файлов — Adobe Acrobat Reader DC.
Подписывать документ Word электронной подписью нужно, когда он полностью готов. После этого файл станет доступен только для чтения. Если вы внесете в него изменения, все подписи станут недействительными.
Microsoft Office Starter и web-компоненты Microsoft Office 365 не поддерживают работу с электронной подписью.
- Системные требования
- Проверить, кто и когда подписал документ
- Настройте Outlook
- Настроить Adobe Acrobat Reader DC
- Проверить подпись
- Решение первое, полу-ручное
- Решение второе, автоматическое
- Инструкция по созданию файла, подписанного ЭЦП, с использованием ПО КриптоПро
- КриптоПро CSP
- Инструменты КриптоПро
- Установка сертификатов
- Создание подписанного документа
- Заключение
Системные требования
Проверить, кто и когда подписал документ
Нажмите «Файл/Сведения/Просмотр подписей». В окне «Подписи» вы увидите, кто и когда подписал документ. Чтобы получить подробную информацию, кликните подпись правой кнопкой мыши и выберите «Состав подписи».
Подробнее о работе с ЭП в Microsoft Office Word/Excel читайте в инструкции разработчика.
Разберем, как настроить Microsoft Outlook, на примере версии Outlook 2010.
Настройте Outlook
Прежде чем отправить зашифрованное сообщение, обменяйтесь с адресатом сертификатами ЭП. Для этого достаточно отправить ему подписанное (но не зашифрованное) сообщение. Когда он получит письмо, адрес и сертификат отправителя автоматически добавятся в его адресную книгу.
Проверить наличие сертификата или добавить его вместе с контактом можно из письма.
Настроить Adobe Acrobat Reader DC
Проверить подпись
При открытии документа в Adobe Acrobat Reader DC все подписи проверяются автоматически. Чтобы посмотреть результат проверки, кликните левой кнопкой мыши штамп об ЭП.
Подробнее о работе с ЭП в Adobe Acrobat Reader DC читайте в инструкции разработчика.
Нашли неточность? Выделите текст с ошибкой и нажмите ctrl + enter.
Время на прочтение
Итак, все чаще в кругах, работающих с документами все чаще звучат слова «электронный документ» и, связанное с ним почти неразрывно «электронная цифровая подпись», иначе — ЭЦП.
Данный цикл статей предназначен для того, чтобы раскрыть «тайное знание» о том, что это такое, когда и как это можно и нужно использовать, какие есть плюсы и минусы.
Естественно, статьи пишутся не для специалистов по криптографии, а для тех, кто эту самую криптографию будет использовать, или же только начинает ее изучение, желая стать специалистом, поэтому я старался максимально упростить понимание всего процесса, приводя аналогии и рассматривая примеры.
Зачем нам вообще что-то подписывать? Естественно, чтобы удостоверить, что мы ознакомились с содержимым, согласны (а иногда наоборот, не согласны) с ним. А электронная подпись еще и защищает наше содержимое от подмены.
Итак, начать, естественно, стоит с того, что такое электронная цифровая подпись.
В самом примитивном случае это — результат хэш-функции. Что это такое лучше меня разъяснит википедиа, в нашем же случае главное, что с высокой степенью вероятности ее результат не повторяется для разных исходных данных, а также что результат этой функции мало того, что короче исходных данных, так еще по нему исходную информацию восстановить нельзя. Результат функции называют хэшем, а применение этой функции к данным называют хешированием. Грубо, можно назвать хэш функцию архивированием, в результате чего мы получаем очень маленькую последовательность байт, но восстановить исходные данные из такого «архива» нельзя.
Итак, мы читаем файлик в память, хэшируем прочитанное. И что, уже получаем ЭЦП? Почти. Наш результат с большой натяжкой можно назвать подписью, но, все же, полноценной подписью он не является, потому что:
1. Мы не знаем, кто сделал данную подпись
2. Мы не знаем, когда была сделана подпись
3. Сама подпись не защищена от подмены никак.
4. Ну и да, хэш функций много, какая из них использовалась для создания этого конкретного хэша?
Поэтому применять к хэшу слово «подпись» еще нехорошо, будем называть его дальше просто хэш.
Вы посылаете ваш файл другому человеку, допустим, по почте, будучи уверенными, что он точно получит и прочитает именно то, что вы послали. Он же, в свою очередь, тоже должен хэшировать ваши данные и сравнить свой результат с вашим. Если они совпали — все хорошо. Это значит что данные защищены? Нет.
Ведь хэшировать может кто угодно и когда угодно, и вы никогда не докажете, что он хэшировал не то, что вы послали. То есть, если данные будут перехвачены по дороге злоумышленником, или же тот, кому вы посылаете данные — не очень хороший человек, то данные могут быть спокойно подменены и прохэшированы. А ваш получатель (ну или вы, если получатель — тот самый нехороший человек) никогда не узнает, что он получил не то, что вы отправляли, или сам подменил информацию от вас для дальнейшего использования в своих нехороших целях.
Посему, место для использование чистой хэш функции — транспорт данных в пределах программы или программ, если они умеют общаться между собой. Собственно, с помощью хэш функций вычисляются контрольные суммы. И эти механизмы защищают от случайной подмены данных, но не защищают от специальной.
Но, пойдем дальше. Нам хочется защитить наш результат хеширования от подмены, чтобы каждый встречный не мог утверждать, что это у него правильный результат. Для этого самое очевидное что (помимо мер административного характера)? Правильно, зашифровать. А ведь с помощью шифрования же можно и удостоверить личность того, кто хэшировал данные! И сделать это сравнительно просто, ведь есть ассиметричное шифрование. Да, оно медленное и тяжелое, но ведь нам всего-то и надо — зашифровать маленькую последовательность байт. Плюсы такого действия очевидны — для того, чтобы проверить нашу подпись, надо будет иметь наш открытый ключ, по которому личность зашифровавшего (а значит, и создавшего хэш) можно легко установить.
Суть этого шифрования в следующем: у вас есть закрытый ключ, который вы храните у себя. И есть открытый ключ. Открытый ключ вы можете всем показывать и раздавать, а закрытый — нет. Шифрование происходит с помощью закрытого ключа, а расшифровывание — с помощью открытого.
Приводя аналогию, у вас есть отличный замок и два ключа к нему. Один ключ замок открывает (открытый), второй — закрывает (закрытый). Вы берете коробочку, кладете в нее какую-то вещь и закрываете ее своим замком. Так, как вы хотите, чтобы закрытую вашим замком коробочку открыл ее получатель, то вы открытый, открывающий замок, ключик спокойно отдаете ему. Но вы не хотите, чтобы вашим замком кто-то закрывал коробочку заново, ведь это ваш личный замок, и все знают, что он именно ваш. Поэтому закрывающий ключик вы всегда держите при себе, чтобы кто-нибудь не положил в вашу коробочку мерзкую гадость и не говорил потом, что это вы ее положили и закрыли своим замком.
И все бы хорошо, но тут сразу же возникает проблема, а, на самом деле, даже не одна.
1. Надо как-то передать наш открытый ключ, при этом его должна понять принимающая сторона.
2. Надо как-то связать этот открытый ключ с нами, чтобы нельзя было его присвоить.
3. Мало того, что ключ надо связать с нами, надо еще и понять, какой зашифрованный хэш каким ключом расшифровывать. А если хэш не один, а их, скажем, сто? Хранить отдельный реестр — очень тяжелая задача.
Все это приводит нас к тому, что и закрытый ключ, и наш хэш надо хранить в каких-то форматах, которые нужно стандартизировать, распространить как можно шире и уже тогда использовать, чтобы у отправителя и получателя не возникало «трудностей перевода».
Как водится у людей, к чему-то единому прийти так и не смогли, и образовалось два больших лагеря — формат OpenPGP и формат S/MIME + X.509. Но об этом уже в следующей статье.
Как создать отсоединенную подпись к документу
В правилах работы с информационной системой (ИС) может быть указано, что документы должны загружаться с отсоединенной (или открепленной) подписью. Она создается как отдельный файл с расширением *.sgn или *.sig и не меняет сам документ, поэтому его можно открыть без специальных программ.
Для создания отсоединенной подписи потребуется:
У ИС или площадки могут быть особые требования к файлу подписи. Если вы впервые загружаете документ, рекомендуем уточнить в техподдержке, как его подписать. Например, подпись, у которой в названии должно быть расширение исходного файла (*.pdf.sig), можно сформировать только в Saby Crypto или КриптоАрм.
Вы получите архив, который содержит сам документ и отсоединенную подпись к нему с расширением *.sgn. Если требуется расширение *.sig, распакуйте архив и просто поменяйте расширение у файла подписи.
Отсоединенная подпись появится в той же папке, что и исходный документ.
В указанном выше каталоге будет создано 2 файла: сам документ и отсоединенная подпись.
На одном из крупных проектов возникла не совсем обычная для 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. Закладка Сервис, кнопка Посмотреть сертификаты в контейнере, нажимаем Обзор для выбора токена с криптохранилищем, и выбираем нужно нам хранилице. Обычно на одном токене одно хранилище.
Нажимаем Далее и получаем окошко с информацией по сертификату, к которому привязан ключ. Ждем кнопку Установить и устанавливаем сертификат в хранилище Личное для локального пользователя. Обычно, вместе с утилитой КриптоПро CSP в меню Пуск устанавливается ярлык для оснастки Сертификаты. Запускаем оснастку, убеждаемся, что все правильно сделано и сертификат действительно установился в раздел Личное для текущего пользователя.
Дальше, Кликаем правой кнопкой по установленному сертификату, Все задачи, Экспорт. Обязательно отказываемся экспортировать закрытый ключ и сохраняем сертификат куда-нибудь на локальный компьютер, например, на рабочий стол, в формате файла X.509 (. CER) в кодировке DER. Сохраненный сертификат нам понадобиться дальше для выполнения подписи.
Работа утилиты крайне проста. Выбираем папку в которой находятся PDF-файлы, выбираем папку в которую будут сохранены файлы с подписью (если это одна и так же папка, в дополнительных настройках нужно установить флажок «Перезаписывать файлы с одинаковыми именами») выбираем из контейнера сертификат, который будем использовать для подписи, вводим пин от ключа и, если все указали правильно, через несколько секунд в папке-приемнике появятся подписанные PDF-файлы. Для того, чтоб ЭЦП признавалась юридически, по закону, должна быть установлена еще метка времени, но мне для задачи это не требовалось.
В принципе, все! Если у Вас небольшая организация и пара десятков контрагентов то можно вообще ничего больше не делать и оставить все в ручном режиме. Кроме того, 1С нам пока вообще не была нужна, документы в формате PDF можно создать многими способами, в том числе и из Microsoft Office.
Долго не мог разобраться, почему подпись не проходит и выдает ошибку. Оказалось, что успешной работы утилиты КриптоПро PDF на компьютере должна быть установлен Adobe Acrobat Pro (не Reader, это важно!). Именно с его помощью утилита модифицирует PDF-файлы и добавляет и них подпись.
Пример подписанного файла на картинке. Выглядит как обычный PDF, только на закладке Подписи появились данные о подписанте. Из важного, указано кто подписал документы (обычно это ФИО и название организации) и что с момента подписания документ не изменялся. Информацию о том, что сертификат ненадежный можно игнорировать. Это говорит только о том, что компания Adobe и ее продукт Acrobat Reader ничего не знают о Вашем сертификате.
Решение второе, автоматическое
Как писал выше, в моем случае ручное решение не подошло. Контрагентов много, для каждого за месяц создается несколько десятков документов. Их все нужно сохранить в PDF, подписать, отправить одним письмом. Для решения задачи придумали модифицировать и использовать стандартную для многих конфигураций обработку «Групповая обработка справочников и документов». Для самых популярных конфигураций эта обработка или входит в саму конфигурацию или ее можно найти как внешнюю на диске с ИТС.
Обработка уже умеет печатать отобранные документы. В последних версиях платформы появился штатный механизм сохранения печатных форм в виде PDF файлов. Осталось совместить эти два механизма и сохранять выбранные пользователем документы в папку на локальном компьютере, а затем запускать командную строку и запускать утилиту КриптоПро PDF для выполнения подписи.
Немного доработали интерфейсную часть. Убрали из обработки работу со справочниками. Оставили в интерфейсе 4 вида документов, которые нужно отправлять. Изменили систему отборов. Создали новый регистр сведений Настройки ЭЦП. В него для каждого пользователя сохраняется информация о том, по какому пути лежит КриптоПро PDF на локальном компьютере, папки для временного хранения файлов, сертификат, которым будет выполнена подпись. Еще просили сохранять пин от ключа, но мы не стали этого делать из соображений безопасности.
Обработка группирует отобранные документы по контрагентам, дальше циклом проходится по каждому контрагенту, выбирает все его документы, сохраняет в виде PDF-файлов на диск, запускает утилиту КриптоПро PDF из командной строки, подписывает сохраненные документы, создает документ Электронное письмо с контактными данными из справочника контрагентов, в качестве вложения прикрепляет подписанные документы из папки на диске, переводит письмо в статус для отправки и переходит к следующему контрагенту. Письма отправляются регламентным заданием раз в 10 минут. Обработку можно оставлять на ночь. Возникшие проблему будут корректно обработаны, а утром пользователь увидит журнал шибок и журнал отправленных писем.
Для удобства приведу кусочек кода, который выполняет саму процедуру подписания. Все параметры берутся из созданного регистра сведений.
МассивВходящих = НайтиФайлы(КаталогВходящие, «*.pdf», Ложь);
КоличествоФайловВходящие = МассивВходящих. Количество();
Сообщить(«Обнаружено » + КоличествоФайловВходящие + » файлов для подписи.»);
КоманднаяСтрока = ИмяФайлаКриптоПро + » sign» +
» —in-dir=»»» + КаталогВходящие + «»»» +
» —out-dir=»»» + КаталогИсходящие + «»»» +
» —report-dir=»»» + КаталогЛоги + «»»» +
» —err-dir=»»» + КаталогОшибки + «»»» +
» —certificate=»»» + ИмяФайлаСертификата + «»»» +
» —pin=»»» + ПинКод + «»»» +
» —overwrite-files»;
ЗапуститьПриложение(КоманднаяСтрока, «», истина);
МассивИсходящих = НайтиФайлы(КаталогИсходящие, «*.pdf», Ложь);
КоличествоФайловИсходящие = МассивИсходящих. Количество();
Сообщить(«Подписано » + КоличествоФайловИсходящие + » файлов.»);
Инструкция по созданию файла, подписанного ЭЦП, с использованием ПО КриптоПро
Для собственного использования создал инструкцию для подведов. Буду рад, если кому-нибудь пригодится в работе. Ниже представлен текст с картинками из инструкции по созданию подписанного ЭЦП электронного документа, с использованием ПО КриптоПро. В самом конце приложена ссылка на исходник, он выполнен в виде Гугл документа, шаблон — брошюра, формат листа А4. Его можно использовать по своему усмотрению.
КриптоПро CSP
Для подписи электронных документов, будем использовать программное обеспечение КриптоПро CSP.
Использование иных криптографических программ под административную ответственность руководителей и лиц, использующих ПО СКЗИ, не имеющих действующего сертификата соответствия ФСБ РФ.
Инструменты КриптоПро
Для работы с ЭЦП запустите утилиту “Инструменты КриптоПро”. В ней собраны все необходимые инструменты для работы с ЭЦП
Установка сертификатов
Используя Инструменты КриптоПро, перейдите в пункт меню “Сертификаты” и установите сертификат Федерального казначейства в “доверенные корневые центры сертификации”.
Затем повторите процедуру для ЭЦП сотрудника, выбрав место установки сертификата “Личное”. Подготовка завершена.
Создание подписанного документа
Подписать можно абсолютно любой файл.
Перейдите в пункт “Создание подписи”
Нажмите на кнопку “Выбрать файл для подписи” и выберите файл, который нужно подписать.
Выберите подпись, которой необходимо подписать документ. Обратите внимание — ЭЦП должно быть актуальной.
После выбора ЭЦП станет активной кнопка “Подписать”. Необходимо её нажать. Если документ подписан и нет ошибок — под кнопкой “подписать появится соответствующая надпись. Либо будет указана ошибка с кодом.
Далее перейдите в папку, где хранился подписываемый документ, в нем будет два файла — сам документ и его подпись. Размещать или пересылать необходимо оба документа.
Заключение
Инструкцию делал для подведов. Писал максимально простым языком. Если кому то пригодится в работе — буду рад.
Ссылка на исходник инструкции в виде брошюры на Гугл диске