Статус: Новичок
Группы: Участники
Зарегистрирован: 10.03.2017(UTC) Сообщений: 2
|
- Win 10
- IE 11
- Plugin 2.0
- CSP 4.0 R2 (9842)
Доброго дня, Пытаюсь подписать xml с использованием шаблона. Если использовать URI с указанием нужно узла подпись производится успешно, однако xsd схема не позволяет проставлять пользовательские атрибуты узлам, поэтому решил в шаблоне использовать преобразования xslt, а URI оставить пустым. Подписываемый документ выглядит так: Код:
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.06" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.06">
<CstmrCdtTrfInitn>
<PmtInf>
<PmtInfId>some</PmtInfId>
</PmtInf>
<SplmtryData>
<Envlp>
<SgntrSt>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo id="sig-some">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116">
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:copy-of select="//*[local-name()='PmtInfId'][text()='some']/.."/>
</xsl:template>
</xsl:transform>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
<ds:DigestValue/>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue/>
<ds:KeyInfo/>
</ds:Signature>
</SgntrSt>
</Envlp>
</SplmtryData>
</CstmrCdtTrfInitn>
</Document>
В ходе подписания выдаётся ошибка: "Не удалось подписать документ. Ошибка при обработке цифровой подписи XML". Журнал dbgView во вложении.  1.log (5kb) загружен 3 раз(а).Код js выглядит так: Код:
var oSigner = cadesplugin.CreateObject("CAdESCOM.CPSigner");
oSigner.Certificate = oCertificate;
var oSignedXML = cadesplugin.CreateObject("CAdESCOM.SignedXML");
oSignedXML.Content = dataToSign;
oSignedXML.SignatureType = 2;
var signed = oSignedXML.Sign(oSigner);
return signed;
Возможно я что-то упускаю и в oSignedXML нужно для такого сценария устанавливать какие-то доп. параметры? Как правильно подписать подобный документ при помощи плагина?
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.03.2017(UTC) Сообщений: 2
|
Для потомков: по всей видимости xslt трансформации не поддерживаются. Элементы в документах, подобных обсуждаемому, можно подписать по шаблону при помощи трансформаций xpath. Код:
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo id="sig-some">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<ds:XPath>ancestor-or-self::PmtInf</ds:XPath>
</ds:Transform>
<ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<ds:XPath>//*[local-name()='PmtInfId'][text()='some']/..</ds:XPath>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
<ds:DigestValue/>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue/>
<ds:KeyInfo/>
</ds:Signature>
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close