Выпуск сертификата в УЦ КриптоПРО

Важно! Запрос на выпуск сертификата в УЦ КриптоПРО из Correqts, должен содержать полученный ранее идентификатор пользователя и подписанный на стороне Correqts запрос на сертификат (ключевые атрибуты и теги запроса: Request/@requestId, Request/CertGenRequest/CaId и Request/CertGenRequest/Request)!

CertGenRequest – обработка входящих сообщений из Correqts (Request/CertGenRequest – запрос на выпуск сертификата в УЦ КриптоПРО). Сохранение в служебной таблице cpvc_SubmitCertRequests ключевой пары ID запроса из Correqts и ID запроса на выпуск сертификата в УЦ КриптоПРО. Маршрут вызывает метод УЦ SubmitCertRequest, передавая в него подписанный запрос в параметр rawRequest.

Ключевые шаги

Метод SubmitCertRequest (целевой элемент) Запрос Request/CertGenRequest (источник)
userId Request/CertGenRequest/CaId
rawCertRequest Request/CertGenRequest/Request
userComment (пустая строка)
authority (пустая строка)

Важно! При вызове метода (веб-сервиса) УЦ необходимо устанавливать заголовок, в котором указать параметр SOAPAction равный значению «http://cryptopro.ru/pki/registration/service/2010/03/RegAuthLegacyContract/SubmitCertRequest»

Таблица cpvc_SubmitCertRequests (целевой элемент) Источник
corrRequestId Request/@requestId
CRYPTOREQEXTID SubmitCertRequestResponse/SubmitCertRequestResult

INSERT INTO cpvc_SubmitCertRequests (corrRequestId, CRYPTOREQEXTID) VALUES (:corrRequestId, :CRYPTOREQEXTID)

CheckGetCertificate – служебный маршрут. Данный маршрут проверяет наличие не обработанной ключевой пары из таблицы cpvc_SubmitCertRequests, ранее записанной маршрутом CertGenRequest и формирует сообщение для маршрута GetCertificate. В данном сообщении содержится ключевая пара:

<?xml version="1.0" encoding="UTF-8"?>

<GetCertificate>

<corrRequestId>016cfbb1-d76c-1253-9ffe-823881f280ee</corrRequestId>

<regRequestId>974ae64f-dcfa-4a28-9270-aaee006af669</regRequestId>

</GetCertificate>

где

GetCertificate/corrRequestId– идентификатор запроса на выпуск сертификата в Correqts, это Request/@requestId.

GetCertificate/regRequestId – идентификатор запроса на выпуск сертификата из УЦ, полученного в ответе SubmitCertRequestResponse/SubmitCertRequestResult.

Для работы маршрута требуется выполнить конфигурирование системы ТИР/ActiveMQ.

  1. В используемой ТИРом ActiveMQ, требуется создать служебную очередь CryptoPROVCcert

  2. В настройках ТИР, в адаптере JMS, требуется настроить очередь для повторной обработки процесса. В имени очереди указать служебную очередь CryptoPROVCcert и указать имя (пример: aliasCryptoPROVCcert)

    Нажмите для масштабирования
  3. В настройках ТИР, в адаптере JMS, требуется настроить планировщик. Указать необходимы поля. В поле «Периодический запрос в формате xml» указать значение «<CheckGetCertificate/>»

    Нажмите для масштабирования

Ключевые шаги

Выполняется запросом к БД ТИР в таблицу cpvc_SubmitCertRequests.

Запрос: SELECT * FROM cpvc_SubmitCertRequests WHERE CAID IS NULL

Сообщение GetCertificate (целевой элемент) Запись в таблице cpvc_Submit Cert Requests (источник)
corrRequestId corrRequestId
regRequestId CRYPTOREQEXTID

GetCertificate – служебный маршрут для формирования ответа Response/Certificate на запрос Request/CertGenRequest. При поступлении в маршрут сообщения GetCertificate, содержащего ключевую пару, выполняется запрос статуса запроса, методом УЦ GetCertRequestRecord. Входящий параметр certRequestId содержит идентификатор запроса в УЦ навыпуск сертификата. После вызова метода УЦ GetCertRequestRecord, выполняется анализ полученных данных содержащихся в GetCertRequestRecordResponse/GetCertRequestRecordResult. В данном теге содержится XML, которая содержит информацию о состоянии запроса на регистрацию. Ключевым к анализу является атрибут xml/data/row/@Status. Если атрибут содержит значения «C» или «K», то считается, что запрос на выпуск сертификата успешно обработан в УЦ. Если запрос успешно обработан, то выполняется вызов метода GetCertificateRecordByCertRequestId, получение выпущенного сертификата из УЦ. Иначе, маршрут останавливает дальнейшую работу. В случае успешного вызова метода GetCertificateRecordByCertRequestId в ответе GetCertificateRecordByCertRequestIdResponse/GetCertificateRecordByCertRequestIdResult будет содержаться набор данных в виде XML в котором будет содержаться выпущенный сертификат в УЦ, в кодировке base64. Сертификат забираем из атрибута xml/data/row/@RawCertificate. После успешного получения сертификата из УЦ, маршрут выполняет обновление данных в таблице (сохраняя идентификатор пользователя для ключевой пары, т.е. пользователя который выпускает сертификат) и формирует ответное сообщение для Correqts.

Ключевые шаги

Метод GetCertRequestRecord (целевой элемент) Запрос GetCertificate (источник)
certRequestId regRequestId
selectColumns (пустая строка)

Важно! При вызове метода (веб-сервиса) УЦ необходимо устанавливать заголовок, в котором указать параметр SOAPAction равный значению «http://cryptopro.ru/pki/registration/service/2010/03/RegAuthLegacyContract/GetCertRequestRecord»

Выполняет проверку полученного значения из результирующего сообщения.

Результирующее сообщение получаем из ответа GetCertRequestRecordResponse/GetCertRequestRecordResult

Проверка статуса: xml/data/row/@Status = «C» или xml/data/row/@Status = «K»

Если условие выполняется, то выполняем дальнейшую работу маршрута.

Метод GetCertificateRecordByCertRequestId (целевой элемент) Запрос GetCertificate (источник)
certRequestId regRequestId
selectColumns (пустая строка)

Важно! При вызове метода (веб-сервиса) УЦ необходимо устанавливать заголовок, в котором указать параметр SOAPAction равный значению «http://cryptopro.ru/pki/registration/service/2010/03/RegAuthLegacyContract/GetCertificateRecordByCertRequestId»

Таблица cpvc_SubmitRegRequests (целевой элемент) Источник
corrRequestId GetCertificate/corrRequestId
CRYPTOREQEXTID GetCertificate/regRequestId
CAID xml/data/row/@UserId

Скрипт: UPDATE cpvc_SubmitCertRequests SET CAID = :CAID WHERE corrRequestId = :corrRequestId AND CRYPTOREQEXTID = :CRYPTOREQEXTID

СообщениеRequest/CertGenRequest (целевойэлемент) Источник
data xml/data/row/@RawCertificate