Проверка подписи XMLDSIG на примере СМЭВ

Подготовка SOAP-сообщения перед созданием подписи XMLDSIG на примере СМЭВ
Проверка подписи органа власти с помощью сервиса СМЭВ
Проверка подписи XMLDSIG (WS-Security) с помощью сервиса СПЭП СМЭВ

Для начала, нам необходимо установить КриптоПро CSP и КриптоПро CADESCOM. Скачать данные продукты можно по этой ссылке. Если используется клиент-серверный вариант работы платформы 1С, то устанавливаем продукты КриптоПро на тот же компьютер, где установлен сервер 1С:Предприятие.

Все ниже используемые API-функции описаны по адресу вот тут в разделе КриптоПро ЭЦП. Руководство разработчика.

Привожу пример функции, которая выполняет проверку подписи формата XMLDSIG, формируемая СМЭВ(система межведомственного электронного взаимодействия), ОВ(органа власти) или ПГУ(портал государственных услуг). Заметим, что формат передачи подписи в СМЭВ используется WS-Security:

// Выполняет проверку подписи СМЭВ.
//
// Параметры
//  СтрокаXML  - Строка - текст XML канонического вида, имеющая подпись XMLDSIG.
//
// Возвращаемое значение:
//   Булево   - результат проверки подписи.
//
Функция ПроверитьПодпись_XMLDSIG(СтрокаXML) Экспорт

SignedXML = Новый COMОбъект("CAdESCOM.SignedXML");

Корректная = Ложь;
Попытка
SignedXML.Verify(СтрокаXML);
Корректная = Истина;
УровеньЖурнала = УровеньЖурналаРегистрации.Информация;
Комментарий = "Верная ЭП сообщения";
Исключение
УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение;
Комментарий = "Неверная ЭП сообщения";
КонецПопытки;

ЗаписьЖурналаРегистрации("CAdESCOM.SignedXML.Verify", УровеньЖурнала, , Комментарий);

Возврат Корректная;

КонецФункции // ПроверитьПодпись_XMLDSIG()


Если требуется проверить подпись только ОВ или ПГУ, то в функцию Verify нужно передать строку с XPath-запросом, который выберет тег Signature, хранящийся в теге Security с атрибутом actor="http://smev.gosuslugi.ru/actors/smev".

Комментарии