Проверка подписи XMLDSIG (WS-Security) с помощью сервиса СПЭП СМЭВ
Подготовка SOAP-сообщения перед созданием подписи XMLDSIG на примере СМЭВ
Проверка подписи XMLDSIG на примере СМЭВ
Проверка подписи органа власти с помощью сервиса СМЭВ
В методических рекомендациях по работе с единой системой межведомственного электронного взаимодействия для проверки электронной подписи информационных систем (ЭП-СМЭВ, ЭП-ОВ, ЭП-ПГУ)* и электронной подписи физических лиц (ЭП-П, ЭП-СП)* указывает специализированный сервис проверки - СПЭП (сервис проверки электронной подписи). Данный сервис обеспечивает проверку электронных подписей и сертификатов и включает методы, обеспечивающие:
Для выполнения проверки ЭП в формате WS-Security у веб-сервис определена операция VerifyWSSSignature. Операция имеет два входных параметра:
1. Записываем XML-сообщение в текстовый файл в кодировке CESU-8, это кодировка UTF-8 без BOM.
2. Читаем текстовый файл как двоичные данные. Полученное XML-сообщение в виде двоичных данных будут передаваться в параметр message, который имеет тип base64binary. При передаче двоичных данных в параметр такого типа, двоичные данные автоматически конвертируются в формат base64, поэтому явного этого делать не нужно.
Способы конвертации строки в base64:
Конвертация строковых данных в строку формата base64
Конвертация строковых данных в строку формата base64. Способ N2.
3. Определяем веб-сервис с помощью объекта WSОпределения на основании WSDL-файла (WSDL-ссылка указанная в документации сервиса). После определения веб-сервиса создаем клиентский прокси с помощью объекта WSПрокси для вызова операций веб-сервиса. Для создания объекта WSПрокси в конструктор передаются значения параметров, которые берутся из WSDL-файла.
Подробная информация по инициализации объектов WSОпределения и WSПрокси по WSDL-файлу описана в статье Вызов Web-сервиса с помощью динамической ссылки.
4. Вызываем операцию веб-сервиса как обычную функцию с передачей параметров и анализируем результат.
Полный текст функции вызова сервиса СПЭП:
Пример обработки можно скачать здесь (см. рисунок 1).
--------------------------------------------------------------------------------------------------------------------------
ЭП-СМЭВ - электронная подпись системы межведомственного электронного взаимодействия
ЭП-ОВ - электронная подпись органа власти
ЭП-ПГУ - электронная подпись портала государственных услуг
ЭП-П - электронная подпись пользователя ЕПГУ
ЭП-СП - электронная подпись служебного пользователя
Проверка подписи XMLDSIG на примере СМЭВ
Проверка подписи органа власти с помощью сервиса СМЭВ
В методических рекомендациях по работе с единой системой межведомственного электронного взаимодействия для проверки электронной подписи информационных систем (ЭП-СМЭВ, ЭП-ОВ, ЭП-ПГУ)* и электронной подписи физических лиц (ЭП-П, ЭП-СП)* указывает специализированный сервис проверки - СПЭП (сервис проверки электронной подписи). Данный сервис обеспечивает проверку электронных подписей и сертификатов и включает методы, обеспечивающие:
- проверку электронной подписи в формате XML digital signature;
- проверку электронной подписи в формате WS-Security;
- проверку электронной подписи в формате PKCS#7;
- проверку статуса сертификата ключа подписи.
- проверку электронной подписи в формате CAdES
- проверку электронной подписи в формате XAdES
- проверку электронной подписи в формате PAdES
- проверку штампов времени
- проверку электронной подписи, формируемой от лица пользователя ЕПГУ
Для выполнения проверки ЭП в формате WS-Security у веб-сервис определена операция VerifyWSSSignature. Операция имеет два входных параметра:
- message - Обязателен к заполнению. В параметр передается подписанное XML-сообщение в формате WS-Security, закодированное в формате base64.
- verifySignatureOnly - Обязателен к заполнению. Флаг, означающий требуется ли проверять только подпись или еще и статус сертификата подписи.
- Code - содержит код проверки.
- Description - содержит текстовое описание ошибки или причины неудачной проверки (если есть).
Алгоритм вызова операции VerifyWSSSignature на платформе 1С
1. Записываем XML-сообщение в текстовый файл в кодировке CESU-8, это кодировка UTF-8 без BOM.
ТекстовыйФайл = Новый ЗаписьТекста(ИмяФайла, "CESU-8");
ТекстовыйФайл.Записать(ДокументXML);
ТекстовыйФайл.Закрыть();
2. Читаем текстовый файл как двоичные данные. Полученное XML-сообщение в виде двоичных данных будут передаваться в параметр message, который имеет тип base64binary. При передаче двоичных данных в параметр такого типа, двоичные данные автоматически конвертируются в формат base64, поэтому явного этого делать не нужно.
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
Способы конвертации строки в base64:
Конвертация строковых данных в строку формата base64
Конвертация строковых данных в строку формата base64. Способ N2.
3. Определяем веб-сервис с помощью объекта WSОпределения на основании WSDL-файла (WSDL-ссылка указанная в документации сервиса). После определения веб-сервиса создаем клиентский прокси с помощью объекта WSПрокси для вызова операций веб-сервиса. Для создания объекта WSПрокси в конструктор передаются значения параметров, которые берутся из WSDL-файла.
ПространствоИмен = "http://esv.server.rt.ru";
WSОпределение = Новый WSОпределения("http://195.245.214.33:7777/esv/?wsdl");
СПЭП = Новый WSПрокси(WSОпределение, ПространствоИмен, "SignatureTool", "SignatureToolSoap");
Подробная информация по инициализации объектов WSОпределения и WSПрокси по WSDL-файлу описана в статье Вызов Web-сервиса с помощью динамической ссылки.
4. Вызываем операцию веб-сервиса как обычную функцию с передачей параметров и анализируем результат.
Response = СПЭП.VerifyWSSSignature(ДвоичныеДанныеФайла, ВалидацияСертификата);
ПодписьВерна = ?(Response.Code = 0, Истина, Ложь);
Полный текст функции вызова сервиса СПЭП:
Функция ПроверитьНаСервере(ДокументXML, ВалидацияСертификата)
// Получаем имя временного файла с расширением xml.
ИмяФайла = ПолучитьИмяВременногоФайла("xml");
// Записываем XML в текстовый файл в кодировке UTF-8 без BOM.
ТекстовыйФайл = Новый ЗаписьТекста(ИмяФайла, "CESU-8");
ТекстовыйФайл.Записать(ДокументXML);
ТекстовыйФайл.Закрыть();
// Считываем файл как двоичные данные.
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
УдалитьФайлы(ИмяФайла);
// Определеяем веб-сервис для вызова его операций.
ПространствоИмен = "http://esv.server.rt.ru";
WSОпределение = Новый WSОпределения("http://195.245.214.33:7777/esv/?wsdl");
СПЭП = Новый WSПрокси(WSОпределение, ПространствоИмен, "SignatureTool", "SignatureToolSoap");
// Вызываем операцию.
Response = СПЭП.VerifyWSSSignature(ДвоичныеДанныеФайла, ВалидацияСертификата);
// Анализируем ответ по коду. Если 0 - то все хорошо.
ПодписьВерна = ?(Response.Code = 0, Истина, Ложь);
// Возвращаем проанализированный ответ.
Возврат Response.Description;
КонецФункции // ПроверитьНаСервере()
Пример обработки можно скачать здесь (см. рисунок 1).
![]() |
Рисунок 1. Пример работы обработки проверки ЭП |
ЭП-СМЭВ - электронная подпись системы межведомственного электронного взаимодействия
ЭП-ОВ - электронная подпись органа власти
ЭП-ПГУ - электронная подпись портала государственных услуг
ЭП-П - электронная подпись пользователя ЕПГУ
ЭП-СП - электронная подпись служебного пользователя
Комментарии
Отправить комментарий