Важно! Запрос на выпуск сертификата в УЦ КриптоПРО из 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.
В используемой ТИРом ActiveMQ, требуется создать служебную очередь CryptoPROVCcert
В настройках ТИР, в адаптере JMS, требуется настроить очередь для повторной обработки процесса. В имени очереди указать служебную очередь CryptoPROVCcert и указать имя (пример: aliasCryptoPROVCcert)
В настройках ТИР, в адаптере JMS, требуется настроить планировщик. Указать необходимы поля. В поле «Периодический запрос в формате xml» указать значение «<CheckGetCertificate/>»
Ключевые шаги
Получение списка ключевых пар, необработанных запросов на выпуск сертификата
Выполняется запросом к БД ТИР в таблицу cpvc_SubmitCertRequests.
Запрос: SELECT * FROM cpvc_SubmitCertRequests WHERE CAID IS NULL
Формирование сообщения GetUserRecordByRegRequestId для маршрута GetCertificate
Сообщение 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_SubmitCertRequests (содержит ключевые пары)
Таблица 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
Формирование ответного сообщения Response/Certificate на запрос Request/CertGenRequest
СообщениеRequest/CertGenRequest (целевойэлемент) | Источник |
data | xml/data/row/@RawCertificate |