Генерация элемента DigestValue в wsse-security с помощью ruby ​​/ savon - PullRequest
3 голосов
/ 06 января 2012

Мне нужно подключиться к веб-сервису, который имеет безопасность wsse и должен генерировать все хэши и токены вручную, потому что у savon пока нет этой функции.

То, что сводит меня с ума, этоподпись.

    <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
      <Reference URI="#_0">
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <DigestValue>......</DigestValue>
      </Reference>
    </SignedInfo>

Это ссылочная часть:

  <u:Timestamp u:Id="_0">
    <u:Created>2012-01-04T08:21:22.143Z</u:Created>
    <u:Expires>2012-01-04T08:26:22.143Z</u:Expires>
  </u:Timestamp>

Насколько я понимаю, мне нужно канонизировать ссылочный элемент (метку времени), а затем получить хеш с SHA-1, а затем закодируйте его в base64.

Вопрос в том, какую часть метки времени мне нужно канонизировать?Я пытался использовать весь элемент, затем использовать и отдельно, но я никогда не получал правильное DigestValue.

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Я разобрался.Я канонизировал блок меток времени с отступом внутри него, который оставил несколько пробелов и "\ n", которые испортили дайджест.После того, как я преобразовал весь XML-запрос в одну строку, все работало правильно.После более чем недели борьбы с этой безопасностью и, наконец, достижения результата, мир кажется прекрасным местом:)

1 голос
/ 16 ноября 2015

Я добавил запрос на использование подписанных временных меток в Akami (гем, который Савон использует для подписи WSSE).Вы можете просмотреть его здесь: https://github.com/savonrb/akami/pull/25 Пока он не будет реализован, вы можете использовать https://github.com/webit-de/akami, который уже реализовал его.

...