首页 文章

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

提问于
浏览
1

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

1. Have the assertion signed: 从IDP发送的断言已签名,并且工作正常 .

2. Have the request/response signed: 使用SSO Circle生成元数据文件时 . 我选择 AuthnRequestsSigned 选项为 true . 我将SP元数据上传到SSO Circle IDP . SP元数据具有以下值 trueAuthnRequestsSignedWantAssertionsSigned . 在运行应用程序时,我的请求和我得到的响应都没有签名 .

我有问题要完成第二项要求 . 我是SAML和安全人员的新手 . 我在这里错过了什么?

UPDATE

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

  • 使用keygen工具创建密钥库,CSR和公钥证书 .

  • 更新我的SP元数据文件中的“数字签名”部分以获得新证书

  • 从IDP SSOCIRCLE中删除旧的SP元数据文件,并添加新的SP元数据文件

  • 更改 spring 配置以使JKSKeyManager使用我使用新别名和密码创建的新密钥库 .

我现在需要做的是让IDP(SSOCIRCLE)将响应发送到a . 回复已签署b . 断言已签署

How can that be achieved? 我需要做些什么更改才能解决这个问题,因为响应的签名应该与断言的签名不同 . 谢谢 .

1 回答

  • 3

    HTTP重定向绑定要求在发送消息之前删除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,则传输层将提供消息的真实性和不可否认性(数字签名的特征) .

相关问题