如何使用Spring Security SAML扩展签署SAML请求/响应

时间:2014-11-24 03:09:48

标签: spring-security x509certificate saml-2.0 xml-signature spring-saml

我能够使用Spring Security SAML扩展程序将我的应用程序作为带有 IDP SSOCIRCLE 的SP。我的客户有以下要求:

1。断言已签名: IDP发送的断言已签名且工作正常。

2。请求/响应已签名:使用SSO Circle生成元数据文件。我选择了 AuthnRequestsSigned 选项 true 。我将SP元数据上传到SSO Circle IDP。 SP元数据具有以下值 true AuthnRequestsSigned &的 WantAssertionsSigned 即可。在运行应用程序时,我的请求和我得到的响应都没有签名。

我有问题要完成第二项要求。我是SAML和安全人员的新手。我在这里缺少什么?

更新

考虑到弗拉基米尔的评论。我将绑定更改为HTTP-Post,所以现在我发送带有签名的SAML请求。 通过执行以下操作,我能够使用我的私钥(而不是示例项目提供的密钥)发送签名请求:

  1. 使用keygen工具创建密钥库,CSR和公钥证书。
  2. 更新我的SP元数据文件中的数字签名部分以获得新证书
  3. 从IDP SSOCIRCLE中删除旧的SP元数据文件并添加新的SP元数据文件
  4. 更改spring配置,让JKSKeyManager使用我使用新别名和密码创建的新密钥库。
  5. 我现在需要做的是让IDP(SSOCIRCLE)将响应发送到哪里     一个。回复已签署     湾断言已签名

    如何实现?我需要做些什么更改才能解决这个问题 响应的签署应该与签署声明不同。     感谢。

1 个答案:

答案 0 :(得分:3)

HTTP-Redirect绑定要求在发送消息之前删除SAML消息本身上存在的任何ds:Signature元素:

  

SAML协议消息上的任何签名,包括XML   元素本身,必须删除。注意,如果消息的内容   包括另一个签名,例如签名的SAML断言,这个   嵌入式签名未被删除。但是,这样一条消息的长度   编码后基本上排除了使用这种机制。从而   包含签名内容的SAML协议消息不应该是   使用这种机制编码。 (saml2-bindings,578-582,从PDF复制粘贴)

同时,HTTP-Redirect绑定要求将新的数字签名作为参数Signature附加到GET URL。

这意味着使用HTTP重定向,您无法在消息级别上发送带有签名的消息,而是将签名添加到URL。因此,从Spring SAML发送到IDP的整个消息都已签名(从SP发送的数据中检查)。

除了在断言中包含签名之外,没有标准方法强制IDP发送在消息级别上签名的响应消息。如果您使用的是SSL / TLS,则传输层会提供消息的真实性和不可否认性(数字签名的特征)。