3

我需要连接到具有 wsse 安全性的 Web 服务,并且需要手动生成所有哈希和令牌,因为 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。

4

2 回答 2

2

I sorted it out. I was canonicalizing the timestamp block with indentation inside it, which left some spaces and "\n"s that messed up the digest. After I transformed the whole xml request to one-liner, everything worked correct. After more than week battling with this security and finally seeing some result, the world seams a beautiful place :)

于 2012-01-11T17:45:57.223 回答
1

我向 Akami 添加了一个使用签名时间戳的拉取请求(Savon 用于 WSSE 签名的 gem)。您可以在此处查看:https ://github.com/savonrb/akami/pull/25 在实现之前,您可以使用已经实现的https://github.com/webbit-de/akami 。

于 2015-11-16T11:13:25.247 回答