Статус: Новичок
Группы: Участники
Зарегистрирован: 21.06.2022(UTC) Сообщений: 6  Откуда: Медведево Сказал(а) «Спасибо»: 3 раз
|
Добрый день. Уточните пожалуйста, как проверить оборачивающую ЭП методом `VERIFY` объекта `CAdESCOM.SignedXML` ? Исходные данные, Криптпо Про CSP 4/ cadesplugin. Подпись формируется следующим образом : Код:const { cadesplugin } = window;
const oSigner = await cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
await oSigner.propset_Certificate(oCertificate);
await oSigner.propset_CheckCertificate(true);
// Создаем объект CAdESCOM.SignedXML
const oSignedXML = await cadesplugin.CreateObjectAsync("CAdESCOM.SignedXML");
await oSignedXML.propset_Content(sContent); // sContent=base64
// Указываем тип подписи - в данном случае вложенная
await oSignedXML.propset_SignatureType(
CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING
);
// Указываем алгоритм подписи
await oSignedXML.propset_SignatureMethod(XmlDsigGost3410Url2012256);
// Указываем алгоритм хэширования
await oSignedXML.propset_DigestMethod(XmlDsigGost3411Url2012256);
let sSignedMessage = "";
try {
sSignedMessage = await oSignedXML.Sign(oSigner);
} catch (err) {
throw err;
}
Подписываемое сообщение предварительно переводится в base64. Далее осуществляю проверку подписанного сообщения методом `VERIFY`,предварительно конвертируя в base64(делается для того ,что подписываемые данные имеют кодировку отличную от UTF-8) перед подачей на вход методу. Код:try {
const oSignedXML = await cadesplugin.CreateObjectAsync("CAdESCOM.SignedXML");
await oSignedXML.Verify(sSignedMessage);//sSignedMessage=base64
} catch (err) {
console.error(err);
throw err;
}
После описанных манипуляций метод `VERIFY` возвращает `undefined`,тоесть не выбрасывает исключения или возвращает HRESULT. Подскажите в какую сторону копать или что я делаю не так?
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 396 раз в 366 постах
|
Добрый день. На первый взгляд проблема в кодировках. Если подписываемое сообщение переведено в BASE64, то обязательно перед передачей Content установить свойство ContentEncoding в 1. В коде я этого не вижу, поэтому подписаны будут не исходные данные, а их BASE64 представление (без раскодировки). Это не вызывает исключения, так как технически XMLDSIG допускает подпись не только XML, но и произвольных двоичных данных.
Не помешает проверить, что именно возвращается после подписания, некоторые интерфейсы/функции подписания требуют раскодирования результата из HEX, можно уточнить по справке.
Как подписанное передать на проверку мне сказать сложно, так как TYPE_ENVELOPING не использую, но полагаю процедура такая же как и у других типов подписи.
|
 1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.06.2022(UTC) Сообщений: 6  Откуда: Медведево Сказал(а) «Спасибо»: 3 раз
|
Спасибо ,что обратили внимание на пост. В интерфейсе `ISignedXML` отсутствует свойство ContentEncoding , это свойство доступно в интерфейсе ICPSignedData. В целом метод VERIFY интерфейса `ISignedXML` отрабатывает при проверке `битых подписей` в документе. Осталось разобраться как правильно прокинуть xPath в VERIFY для получения исключения при проверке XML не содержащих подпись.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 926  Откуда: Крипто-Про Поблагодарили: 101 раз в 96 постах
|
Добрый день! В ISignedXML кодировка BASE64 распознаётся автоматически. Если вы создаёте подпись вида CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING, то это нужно указать при проверке, так же, как вы указывали это при создании. Информацию о действительности каждой найденной подписи в документе можно получить при помощи свойства Signers. Коллекция Signers заполняется в порядке следования элементов, найденных XPath-запросом. По умолчанию используется следующий запрос: "//*[local-name()='Signature' and namespace-uri()='http://www.w3.org/2000/09/xmldsig\#']" http://cpdn.cryptopro.ru...16e78246e74f5817683.html
|
 2 пользователей поблагодарили Новожилова Елена за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.06.2022(UTC) Сообщений: 6  Откуда: Медведево Сказал(а) «Спасибо»: 3 раз
|
Доброго дня! Елена ,спасибо огромное! Буду реализовывать, хорошего Вам дня!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close