"Оцифровка" бизнес-процессов.

   
     +7 (910) 778-05-31, romanb@nxt.ru
Коснитесь для звонка

Интеграция ЭЦП в систему программ 1С:Предприятие

Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 4 мая 2011 г. N 99-ФЗ "О лицензировании отдельных видов деятельности".

По законодательству электронные документы, подписанные электронно-цифровой (ЭЦП) подписью, имеют такую же юридическую силу, как и бумажные (ФЕДЕРАЛЬНЫЙ ЗАКОН от 10.01.2002 N 1-ФЗ (ред. от 08.11.2007) "ОБ ЭЛЕКТРОННОЙ ЦИФРОВОЙ ПОДПИСИ" (принят ГД ФС РФ 13.12.2001)). При создании системы автоматизации предприятия часто возникает задача автоматизации документооборота с использованием ЭЦП.

В данной разработке предлагается схема организации ВНУТРЕННЕГО документооборота в программе 1С:Предприятие с использованием ЭЦП различных видов. Ключевой носитель – дискета или USB-flash. Обеспечивается возможность подписи данных объекта метаданных 1С:Предвриятие «документ». Используемые алгоритмы — RSA и сертифицированные ФСБ ГОСТ Р 34.10-94, ГОСТ Р 34.11-94, ГОСТ Р 34.10-2001(криптопровайдер КриптоПро).

В технологической платформе 8.2 добавлен объект МенеджерКриптографии, но данная разработка велась без его использования(поскольку было это до появления версии плаформы 8.2) и для реализации вызовов криптографических функций используется COM-объект.

За основу взят готовый COM-объект от Microsoft CAPICOM, который в случае необходимости можно заменить другим, с условием совпадения использовавшихся в работе имен классов и функций, а также их параметров, либо изменить вызовы в програмном коде 1С:Предприятие.

Для использования RSA в системе должен быть установлен .NET Framework, для использования алгоритмов ГОСТ должно быть установлено средство криптографической защиты КриптоПРО CPS.

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

Исходя из закона, электронная цифровая подпись призвана установить отсутствие искажений в документе.

Возникает вопрос: как быть с реквизитами, которые сами по себе являются объектами конфигурации, а не просто представляют из себя строку или число? Конечно у любого объекта конфигурации есть так называемое "представление", то есть реквизит, по которому человек в первую очередь будет идентифицировать нужный элемент среди множества. Если документ подписан по представлениям объектов, но после этого будут изменены реквизиты какого-либо из элементов, участвовавших в данном документе, не являющиеся представлением, то ЭЦП будет продолжать являться действительной!

Например в документе есть реквизит «контрагент», который является ссылкой на элемент справочника «контрагенты». После подписания документа контрагент изменяет какие-либо свои данные, к примеру юридический адрес и ИНН, а ЭЦП  при этом будет подтверждать, что искажений в документе нет!

Кроме того сами реквизиты-ссылки могут состоять не только из простых реквизитов(строк, чисел и т.п.), а в свою очередь иметь ссылки на другие объекты. Каким образом реагировать на изменение данных в этих элементах?

Единственный выход, это подписывать не сам объект, а делать слепок со всей иерархии элементов-ссылок, которые использовались объекте, в определенном формате, и подписывать уже этот слепок. Иерархия имеет оконечную структуру и в итоге можно добраться по дереву до «элементарного» элемента, который не содержит ссылки на другие элементы, а состоит из строк, чисел и других простых реквизитов. Но здесь мы упираемся в другую крайность…

Допустим, к примеру, у элемента справочника номенклатуры изменился реквизит "основной поставщик". По идее этот реквизит не является идентифицирующим номенклатуру реквизитом, как например артикул или страна-производитель. Так вот, если мы подписываем все дерево объектов,  то в случае изменения реквизита" основной поставщик" ЭЦП будет показывать на изменения в документе.

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

Текущая реализация предусматривает подписываение слепка реквизитов только самого документа, без обхода объектов его реквизитов.

О механизмах.

1С:Предприятие 8 не может напрямую использовать некоторые классы .NET Framework в силу ограниченных возможностей встроенного языка программирования. К сожалению, к таковым относятся и классы x509, обеспечивающие взаимодействие с крипторпровайдером КриптоПро. Хотя и есть возможность использовать многие криптографические классы .NET, к которым можно обращаться как к COM-объектам, например функции RSA и функции хеширования.

При этом из 1С:Предприятие 8.2 можно подключить любой COM-объект и работать его методами. На текущий момент можно воспользоваться методами объекта "МенеджерКриптографии"(подробнее Механизмы взаимодействия КриптоПро и 1С:Предприятие).

Реализация.

Была разработана конфигурация, в которой реализован необходимый минимум объектов 1С:Предприятие 8: документов, журналов и справочников. По выполняемым функциям соответствует части товаро-учетной программы торгового предприятия в части прихода товара.

В конфигурации есть объект "документ", которым оформляется факт прихода товара – «Приход». Он состоит из шапки, которая содержит реквизиты «Контрагент», «Подписано пользователем», «Подпись», и табличной части со следующими реквизитами: «Товар», «Количество». Это центральный объект в системе, подписываться будет именно он. Документ представляется в формате xml и этот текст подписывается. 

Схема базы данных имеет следующую структуру:

Схема БД крипто

Схема работы

Предположим следующую схему фиксации прихода товара на торговом предприятии:

  • Товарная накладная заносится оператором ПК – вводится документ «Приход»;
  • Кладовщик, являясь материально-ответственным лицом, проверяет введенные данные и подписывает документ с помощью своей ЭЦП;
  • В случае необходимости, руководитель, сам кладовщик или иное заинтересованное лицо всегда может проверить факт того, что документ с момента подписания не был изменен. Сделать это возможно с помощью процедуры проверки подлинности ЭЦП.

  image002

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

Справочник «Пользователи» имеет реквизит «Сертификат», в котором храниться представление сертификата x509, с помощью которого будет осуществляться подпись и проверка подписи. Сертификат указывается при создании элемента справочника или при его изменении, для этого нужно нажать кнопку «Выбрать сертификат x509».

image003

 

 

 

 

 

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

 

image004

 

Как установить КриптоПро и получить тестовый сертификат, можно прочитать здесь.


 

Для работы RSA должен быть установлен .NET Framework.

Ссылка на демо-конфигурацию.

Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 4 мая 2011 г. N 99-ФЗ "О лицензировании отдельных видов деятельности".

2 комментария на данный момент.

  1. Kalimulin:

    Здравствуйте. А можно обновить ссылку на конфигурацию?

Добавить комментарий для admin Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *