TransWikia.com

Плагин криптопро не обрабатывает Transform urn://smev-gov-ru/xmldsig/transform

Stack Overflow на русском Asked by Dmitry Pavlushin on January 7, 2021

Пытаюсь подписать запрос для отправки в СМЭВ шлюз. У меня есть пример запроса, где элемент Transforms имеет следующий вид:

<Transforms>
  <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
  <Transform Algorithm="urn://smev-gov-ru/xmldsig/transform"/>
<Transforms>

насколько я понял, режим подписания CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED не подходит, если нужно несколько Transform’ов. Я стал использовать CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE. Передаю CPSigner’у примерно следующий XML:

<request xmlns="http://www.bftcom.com/smevgate/">
  ...
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
      ...
      <Reference URI="">
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          <Transform Algorithm="urn://smev-gov-ru/xmldsig/transform"/>
        </Transforms>
        ..
      </Reference>
    ...    
  </Signature>
  ...
</request>

На вызове oSignedXml.Sign(oSigner) валится “An error was encountered while processing an XML digital signature. (0x800705BA)” где-то во внутренностях плагина. Убираю трансформ – всё корректно подписывается. Плагин не умеет работать с этим алгоритмом? Через Sharpei мне до этого удалось корректно подписать.

Версия плагина 1.2.4, версия CSP – 4.0.9939, браузер Chrome 65.0.3325.181

2 Answers

  1. Да, если вы используете CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED, то трансформации не надо указывать, плагин это делает сам. Здесь вы можете посмотреть, что в результате получится.
  2. Как было написано выше, плагин не поддерживает трансформацию urn://smev-gov-ru/xmldsig/transform (к огромному сожалению большого количества пользователей). Поэтому остается только реализовать ее самостоятельно, руководствуясь алгоритмом из "Методические рекомендации по работе с ЕСМЭВ". Глобально он сводится к удалению пробелов/переносов строк и замене namespacе'ов на ns:<порядковый номер>. Здесь приведен алгоритм на PHP 7.1, но лично не проверял

Answered by Ivan Tikhonov on January 7, 2021

Нет, не умеет. И на данный момент реализация этой трансформы в ближайшем времени ими не планируется.

Answered by m.m on January 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP