Перейти к содержанию

КриптоПро в мобильном приложении

Удостоверяющий центр КриптоПро отвечает за управление сертификатами на электронные подписи — выдачу, проверку, отзыв, приостановку, возобновление. В настоящее время поддерживается работа с плагинами CryptoPro или RuToken для браузера Chrome.

Часть действий выполняется на уровне сервера (это обмен данными между серверами "Первой Формы" и КриптоПро), эти действия автоматизируются с помощью смартов. Часть действий выполняется на уровне клиента (это обмен данными со считывающим устройством), эти действия автоматизированы с помощью JS API.

Процесс подписания ЭП с помощью КриптоПро

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

При неудачно завершенном диалоге (пользователь закрыл диалог) резолюция по подписи в "Первой Форме" не регистрируется.

При удачно завершенном диалоге в "Первой Форме" регистрируется вынесенная резолюция. Формируется ЭП (хеш файла) записывается в соответствии с настройками подписи: ЭП может добавляться в исходный файл (если этот файл имеет формат DOCX или PDF), а может храниться в базе данных отдельно от файла. Рядом с названием подписанного файла отображается кнопка "Посмотреть хеш".

При выполнении перехода можно подписать сразу несколько документов (комплект), в этом случае подпись генерируется отдельно для каждого документа.

При удалении исходных файлов удаляются и файлы с ЭП.

Порядок настройки

1. Установите и настройте Диспетчер удостоверяющего центра (см. Руководство по техподдержке).

2. Привяжите УЦ к "Первой Форме"

3. Настройте рабочие места пользователей

4. Настройте подписи с включенным признаком ЭЦП на нужных переходах маршрута

5. Автоматизируйте действия с сертификатами

Привязка УЦ к "Первой Форме"

1. Привязка удостоверяющего центра.

В интерфейсе администратора "Первой Формы" перейдите в раздел Система — КриптоПро — Удостоверяющие центры КриптоПро. Добавьте новый удостоверяющий центр или настройте созданный ранее. Подробнее о параметрах настройки можно узнать в Справочнике по интерфейсу администратора.

2. Привязка плагина.

В интерфейсе администратора "Первой Формы" перейдите в раздел Система — КриптоПро — Выбор плагина. Выберите один из доступных плагинов и нажмите кнопку Сохранить.

Настройка рабочего места пользователя

1. Если вы используете носители КриптоПро, на компьютер, с которого будет происходить подписание, установите следующее ПО:

2. Если вы используете носители РуТокен, на компьютер, с которого будет происходить подписание, установите следующее ПО:

  • плагин Рутокен (ссылка на сайт РуТокен). Не забудьте его включить!

  • корневой сертификат удостоверяющего центра, выдавшего ЭП

Настройка подписи в "Первой Форме"

1. В интерфейсе администратора откройте настройки категории, в которой вы хотите настроить подписание с помощью ЭП, и перейдите на вкладку Маршрут.

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

3. Добавьте подпись или используйте подпись, добавленную ранее. У подписи включите признак ЭЦП. Перейдите во вкладку Настройки ЭП(ЭЦП).

4. Выберите СКЗИ КриптоПро/РуТокен. 5. Нажмите кнопку Добавить. Настройте перечень файлов, которые будут подписаны с помощью ЭП. 6. Выберите ДП, в котором будет храниться файл для подписания, или смарт-выражение, которое будет возвращать коллекцию FileID.

ℹ️ Если выбрать Фиксированное значение, то можно подписывать только файлы, вложенные в ДП "Файл", а если выбрать Smart-выражение, то можно подписывать файлы, вложенные в ДП "Файл" или ДП "Таблица", а также файлы, вложенные в задачу.

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

ℹ️ После выбора ИНН пользователь перед применением подписи получит ограниченный список сертификатов. Если сотруднику доступен только один сертификат, всплывающее окно с выбором не будет выводиться на экран, а доступный сертификат будет использоваться по умолчанию.

8. Если необходима проверка машиночитаемой доверенности (это доверенность в XML-формате с правом подписи сотрудника от лица компании), отметьте опцию "МЧД". Если опция "МЧД" активна, перед подписанием ЭЦП будет происходить проверка наличия МЧД у подписывающего пользователя. Если МЧД отсутствует, подпись не будет обработана.

9. Если отмечена опция "МЧД", задайте смарт-выражение для поиска машиночитаемой доверенности и файла электронной подписи SIG. В смарт-выражении должен возвращаться массив двух числовых значений : FileId XML и FileId SIG-файла.

10. Выберите вид подписи: открепленная или прикрепленная.

11. Один файл может быть подписан неограниченным количеством подписей. Для этого в каждой подписи надо выбрать один и тот же ДП типа файл в настройках ЭЦП. Для генерации файла с накоплением ЭЦП нужно в настройках всех подписей поставить галочку "Соподпись", тогда каждая последующая будет прикрепляться к предыдущей.

Действия с сертификатами

Выдать сертификат

Последовательность действий:

Подготовить начальные данные (smart)

  • Строку с данными о пользователе.

  • Строку с данными о сертификате.

Форматы данных см здесь.

1. Зарегистрировать пользователя (smart)

На основе начальных данных из строки XML генерируется уникальный идентификатор пользователя (RA_User_ID).

2. Создать запрос на сертификат (js)

На основе строки с данными о пользователе (RequestString) генерируется зашифрованная строка для отправки в удостоверяющий центр (Request).

3. Выдать сертификат (smart)

На основе зашифрованной строки (Request) и уникального идентификатора пользователя (RA_User_ID) отправляется запрос в удостоверяющий центр. В ответ возвращается идентификатор запроса (RequestID) и сгенерированный сертификат (Certificate).

4. Записать сертификат (js)

Другие доступные действия

  • Приостановить сертификат (smart)

  • Отозвать сертификат (smart)

  • Восстановить сертификат (smart)

  • Сменить pin-код (smart) + (js)

Формат данных о сертификате и пользователе

Данные о пользователе

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

В общем случае структура XML и To (содержит целевые значения). Если выполняется первоначальное создание сертификата, секция From может опускаться. Если выполняется изменение данных, должны присутствовать обе секции.

<ProfileAttributesChange>
  <From>
    <Attribute Oid="2.5.4.3" Value="Иванов Иван Иванович"/>
    <Attribute Oid="2.5.4.4" Value="Иванов"/>
    <Attribute Oid="2.5.4.42" Value="Иван Иванович"/>
    <Attribute Oid="1.2.840.113549.1.9.2" Value="29U6MCO"/>
    <Attribute Oid="2.5.4.10" Value="ООО Ромашка"/>
    <Attribute Oid="2.5.4.12" Value="Заместитель директора"/>
  </From>
  <To>
    <Attribute Oid="2.5.4.3" Value="Иванов Иван Иванович"/>
    <Attribute Oid="2.5.4.4" Value="Иванов"/>
    <Attribute Oid="2.5.4.42" Value="Иван Иванович"/>
    <Attribute Oid="1.2.840.113549.1.9.2" Value="29U6MCO"/>
    <Attribute Oid="2.5.4.10" Value="ООО Ромашка"/>
    <Attribute Oid="2.5.4.12" Value="Директор"/>
  </To>
</ProfileAttributesChange>

Данные о сертификате

Данные о сертификате передаются в УЦ КриптоПро в следующем формате:

[
  { "rdn": "название_атрибута_RuToken", "cpn": "название_атрибута_CryptoPro", "value": "значение_атрибута" }
]

Пример:

[
 {"rdn": "commonName", "cpn": "CN", "value": "ИвановИИ"},
 {"rdn": "surname", "cpn": "SN", "value": "Иванов"},
 {"rdn": "givenName", "cpn": "G", "value": "Иван Иванович"},
 {"rdn": "organizationName", "cpn": "O", "value": "ООО Ромашка"},
 {"rdn": "title", "cpn": "T", "value": "Директор"},
 {"rdn": "emailAddress", "cpn": "E", "value": "ivanov@romashka.ru"},
 {"rdn": "unstructuredName", "cpn": "1.2.840.113549.1.9.2", "value": "123456"}
]

SMART для работы с КриптоПро

CryptoPro CA - Issue certificate — Выпуск сертификата КриптоПро

Параметр Тип Описание
Task number* 1F.Task Номер задачи, из которой берутся/в которую записываются значения указанных ДП
ID CA* Integer ID удостоверяющего центра КриптоПро в "Первой Форме"
EP User id in CA* Integer ID ДП типа "Текст", который содержит GUID пользователя в УЦ
EP Request certificate* Integer ID ДП типа "Текст", который содержит строку запроса сертификата (Request)

Пример строки запроса:

-----BEGIN NEW CERTIFICATE REQUEST-----MIIBLTCB3QIBADATMREwDwYDVQQDDAgzNzY2MjM3NDBjMBwGBiqFAwICEzASBgcqhQMCAiMBBgcqh
QMCAh4BA0MABEAHXJy2UfN+4jMY9en7TV55vMGrd6Ala7MUub8xNOFrEdJCNbysCiNanp4+24EX4csIk
YEXAybTWL2FeIC1gAcoF4wXAYJKoZIhvcNAQkOMU8wTTAcBgkrBgEEAYI3FQcEDzANBggqhQMCAi4AC
AIBATAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFEf1FX9wImxUkDqJUcLgye1Crj83MAgGBiqFAwI
CAwNBAIGaaPFnovZTcPlLOHVfzRpiK8gF0hhv+Pmj/YM27huIjW+fuLooygdJvVto9rJZZtkW/1tYaz7CWiA
OQYfSHmQ=-----END NEW CERTIFICATE REQUEST-----

| EP Request id certificate* | Integer | ID ДП типа "Текст", который содержит GUID запроса на сертификат в УЦ | | EP to write certificate* | Integer | ID ДП типа "Текст", в который должен быть записан выданный сертификат |

CryptoPro CA - new or update user — Привязка сертификата КриптоПро к новому или существующему пользователю "Первой Формы"

Параметр Тип Описание
ID CA* Integer ID удостоверяющего центра КриптоПро в "Первой Форме"
EP user xml* Integer ID ДП типа "Текст", который содержит xml с данными о пользователе

Пример XML:

<ProfileAttributesChange>
 <To>
   <Attribute Oid="2.5.4.3" Value="123"/>
 </To>
</ProfileAttributesChange>

где 123 — GUID пользователя в "Первой Форме"

| Task number* | 1F.Task | Номер задачи, из которой берутся/в которую записываются значения указанных ДП | | EP User id in CA* | Integer | ID ДП типа "Текст", который содержит GUID пользователя в УЦ |

ℹ️ Смарт-действие проверяет, есть ли в "Первой Форме" пользователь с таким GUID. Если есть — данные по нему обновятся, если нет — пользователь будет создан.

CryptoPro CA - pause certificate — Приостановка сертификата КриптоПро

Параметр Тип Описание
Task number* 1F.Task Номер задачи, из которой берутся/в которую записываются значения указанных ДП
ID CA* Integer ID удостоверяющего центра КриптоПро в "Первой Форме"
EP with base64 certificate* String ID ДП типа "Текст", который содержит сертификат в формате base64
С* Date Начало периода приостановки сертификата
По* Date Окончание периода приостановки сертификата
Revocation reason* String Причина приостановки сертификата

CryptoPro CA - resume certificate — Возобновление сертификата КриптоПро

Параметр Тип Описание
Task number* 1F.Task Номер задачи, из которой берутся/в которую записываются значения указанных ДП
ID CA* Integer ID удостоверяющего центра КриптоПро в "Первой Форме"
EP with base64 certificate* Integer ID ДП типа "Текст", который содержит сертификат в формате base64

CryptoPro CA - revoke certificate — Отзыв сертификата КриптоПро

Параметр Тип Описание
Task number* 1F.Task Номер задачи, из которой берутся/в которую записываются значения указанных ДП
ID CA* Integer ID удостоверяющего центра КриптоПро в "Первой Форме"
EP with base64 certificate* Integer ID ДП типа "Текст", который содержит сертификат в формате base64
С* Date Дата, начиная с которой сертификат считается отозванным
Revocation reason* String Причина отзыва сертификата

Get Thumbprint — Получение отпечатка подписи для сертификата КриптоПро

Параметр Тип Описание
Task number* 1F.Task Номер задачи, из которой берутся/в которую записываются значения указанных ДП
EP with base64 certificate* Integer ID ДП типа "Текст", который содержит сертификат в формате base64
EP Thumbprint* Integer ID ДП типа "Текст", который содержит отпечаток подписи

ℹ️ Отпечаток подписи необходим для смены pin-кода для выданного сертификата. Смена pin-кода инициируется JS-функцией tcCryptoLogic.changePin(\<ID ДП, содержащего Thumbprint>).

JS API для работы с КриптоПро

Метод Что делает Параметры Пример вызова
tcCryptoLogic.newRequest Создает запрос на сертификат Номер задачи; ID ДП со строкой запроса (RequestString_EP_ID); ID ДП с запросом после обработки (Request_EP_ID); JSON вида {extParamsId:{ContainerName: 'Container_EP_ID'}}, где Container_EP_ID — ID ДП с названием носителя. Носитель хранит выданные сертификаты, название имеет вид: \\.\\модель_считывателя\\название_контейнера tcCryptoLogic.newRequest(window.taskId, RequestString_EP_ID, Request_EP_ID, {extParamsId:{ContainerName: 'Container_EP_ID'}})
tcCryptoLogic.installCertificate Записывает сертификат на носитель Номер задачи; ID ДП с сертификатом CryptoPro (Certificate_EP_ID); #stepBtnUnderTaskText1312 — ID смарт-кнопки tcCryptoLogic.installCertificate(window.taskId, Certificate_EP_ID).then(function (response) { ... }, function (ex) { dialogs.error("Текст сообщения об ошибке"); })
tcCryptoLogic.changePin Сменяет пин-код ID ДП с отпечатком подписи Thumbprint (при CryptoPro отпечаток получается смарт-действием Get_Thumbprint; при RuToken смарт-автоматизация не нужна) CryptoPro: tcCryptoLogic.changePin(Thumbprint_EP_ID), где Thumbprint_EP_ID — ID ДП с отпечатком. RuToken: tcCryptoLogic.changePin()

Пример работы с сертификатом КриптоПро

Действия с сертификатами выполняются вручную, с помощью настраиваемых кнопок.

Подготовка

  • Создать Удостоверяющий центр КриптоПро (его ID используется в настройках смарт-действий).

  • Создать две категории: категория "Пользователи" для привязки сертификатов УЦ КриптоПро к пользователям "Первой Формы" и категория "Сертификаты" для выполнения действий над этими сертификатами.

ℹ️ Для работы должен быть установлен и включен плагин КриптоПро для браузера — CryptoPro или RuToken.

Категория "Пользователи"

Категория содержит следующие ДП:

ДП Тип Описание ID ДП в данном примере
UserId Текст GUID пользователя в УЦ КриптоПро 11
Xml Текст Данные о пользователе 22

Эти ДП не отображаются при создании новой задачи.

Категория "Сертификаты"

Категория содержит следующие ДП:

ДП Тип Описание ID ДП в данном примере
RequestString Текст Строка с запросом. В ней могут быть указаны данные о пользователе (заполнять необязательно) 33
Request Текст Строка запроса сертификата в УЦ КриптоПро 44
RequestId Текст GUID запроса на сертификат в УЦ КриптоПро 55
UserId Текст GUID пользователя в УЦ КриптоПро (полученный при регистрации пользователя) 66
Certificate Текст Полученный сертификат 77
Container Текст Название контейнера, хранящего сертификат 88

Эти ДП не отображаются при создании новой задачи.

Автоматизация в категории "Пользователи"

Кнопка Зарегистрировать

Смарт-пакет: "Зарегистрировать пользователя" с действием "CryptoPro CA — new or update user"

Автоматизация в категории "Сертификаты"

Кнопка Создать запрос на сертификат

JavaScript выражение:

tcCryptoLogic.newRequest(window.taskId, 33, 44, {extParamsId:{ContainerName: '88'}})

где 33 — это ID ДП RequestString, 44 — ID ДП Request, а 88 — ID ДП Container

Кнопка Выдать сертификат

Смарт-пакет: "Выдать сертификат" с действием "CryptoPro CA — Issue certificate" В смарт-действии Issue certificate заполняются ДП, поэтому после него нужно обновить задачу и обновить карточку задачи.

Кнопка Записать сертификат

JavaScript выражение:

tcCryptoLogic.installCertificate(window.taskId, 77).then(function (response) { $('#stepBtnUnderTaskText1312').click(); $('#ctl00_body > div.sweet-alert.showSweetAlert.visible > div.sa-button-container > div > button').click(); }, function (ex) { dialogs.error("Запись Электронной подписи на персональную карту завершилась с ошибкой.", "Убедитесь, что Ваша карта вставлена в считыватель, и нажмите на кнопку «Записать на носитель». Если ошибка повторилась, обратитесь в Службу Поддержки"); })

где 77 — это ID ДП Certificate.

Работа в пользовательском режиме

В категории "Пользователи"

1. В ДП Xml запишите строку с данными о пользователе по образцу:

<ProfileAttributesChange><To><Attribute Oid="2.5.4.3" Value="ФИО_пользователя"/></To></ProfileAttributesChange>

(может использоваться ФИО пользователя, его ID в "Первой Форме" или другая информация).

2. Нажмите кнопку Зарегистрировать. По xml-данным пользователя будет выполнена регистрация в УЦ КриптоПро — заполнится ДП UserId, необходимый для дальнейшей работы с сертификатами.

В категории "Сертификаты"

1. Скопируйте в ДП UserId значение, полученное при регистрации (см. выше п.2 в категории "Пользователи").

2. Нажмите кнопку Создать запрос на сертификат. В ДП Request будет записана строка запроса сертификата.

3. Нажмите кнопку Выдать сертификат и следуйте указаниям программы. По окончании в ДП RequestId и Certificate будут записаны данные.

4. Нажмите кнопку Записать сертификат. Сгенерированные данные будут переданы в УЦ КриптоПро.

Другие действия

Если нужно автоматизировать процессы приостановки, отзыва и возобновления сертификатов, а также смены pin-кода, вы можете создать кнопки, аналогичные кнопке Выдать сертификат, но с соответствующими смарт-действиями или js-функциями.

Ошибки при работе с УЦ КриптоПро

1. Ошибки, возникающие при работе УЦ КриптоПро, можно посмотреть в журнале.

2. Алгоритм создания подписи и алгоритм ключа проверки подписи должны быть одинаковыми. Рекомендуется использовать ГОСТ Р 34.10-2012. Если невозможно использовать одинаковые алгоритмы, необходимо отключить контроль соответствия:

В реестре Windows в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\CC2 нужно добавить параметр DisableGostCspConformityCheck типа DWORD со значением, отличным от нуля. При эксплуатации УЦ для выпуска квалифицированных подписей этот контроль должен быть включен.

Полезные ссылки

Установка УЦ КриптоПро (Руководство по техподдержке)

Настройка УЦ КриптоПро в "Первой Форме"