使用或不使用断言签名对SAML响应进行签名?

时间:2011-08-05 18:21:17

标签: xml response signature saml sign

签署SAML响应时,我也应该签名断言:

A)生成没有Assertion签名的Response签名。然后在生成两个签名后注入Assertion签名。

B)生成断言签名并在生成响应签名时包含它。

C)其他的东西。?。

〜提前致谢!

4 个答案:

答案 0 :(得分:40)

SAML很糟糕,每次我读回答时他们几乎都是正确的,这里是正确的算法:

  1. SHA1 Assertion的规范版本。
  2. 使用SHA1签名
  3. 生成SignedInfo XML片段
  4. 签署SignedInfo XML片段,再次是规范形式
  5. 获取SignedInfo,签名和密钥信息并创建签名XML片段
  6. 将此SignatureXML插入断言(应该在saml:subject之前)
  7. 不接受断言(包含签名)并插入响应
  8. SHA1此回复
  9. 使用SHA1签名
  10. 生成SignedInfo XML片段
  11. 签署SignedInfo XML片段,再次是规范形式
  12. 获取SignedInfo,签名和密钥信息并创建签名XML片段
  13. 将此SignatureXML插入响应
  14. 将XML版本信息添加到响应中。
  15. 多数民众赞成。 SAML非常糟糕。有许多细微之处使得实现SAML成为一场噩梦(比如计算XML子集的规范形式(断言),也不包括XML文档的XML版本。

    我完成了我的实施,我希望永远不要再次重访这样的痛苦。

答案 1 :(得分:7)

我相信正确答案是B)。首先对Assertion进行签名,然后对包含已签名的Assertion数据的Response进行签名。但是,如果单个发行人/实体(STS / IDP /等)签署两者,那么没有真正的理由签署断言吗?只需签署协议消息/响应,其中应包括断言数据。这将减少SP的处理要求。对于Web SSO,当您有一个不同的实体签署Assertion和Response时,我只见过这两个部分。 - 伊恩

答案 2 :(得分:6)

如果你要同时签名,那么必须首先签署断言,然后是响应,因为响应签名将基于响应的全部内容(包括断言签名)。因此,签署第二个断言会使响应签名无效。

答案 3 :(得分:0)

正确的答案是B。

如果断言方使用A签署SAML响应,则依赖方必须在验证SAML响应之前删除SAML响应的签名和SAML断言的签名。 SAML核心规范表明,除了包络签名变换或独占规范化变换之外,不得使用变换生成签名。这两个转换中没有一个可以删除SAML断言的签名。因此,依赖方无法验证SAML响应。