我能够使用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元数据具有以下值 true : AuthnRequestsSigned & WantAssertionsSigned . 在运行应用程序时,我的请求和我得到的响应都没有签名 .
我有问题要完成第二项要求 . 我是SAML和安全人员的新手 . 我在这里错过了什么?
UPDATE
考虑到弗拉基米尔的评论后 . 我将绑定更改为HTTP-Post,所以现在我发送带有签名的SAML请求 . 我能够通过执行以下操作发送使用我的私钥(不是示例项目提供的私钥)签名的请求:
-
使用keygen工具创建密钥库,CSR和公钥证书 .
-
更新我的SP元数据文件中的“数字签名”部分以获得新证书
-
从IDP SSOCIRCLE中删除旧的SP元数据文件,并添加新的SP元数据文件
-
更改 spring 配置以使JKSKeyManager使用我使用新别名和密码创建的新密钥库 .
我现在需要做的是让IDP(SSOCIRCLE)将响应发送到a . 回复已签署b . 断言已签署
How can that be achieved? 我需要做些什么更改才能解决这个问题,因为响应的签名应该与断言的签名不同 . 谢谢 .
1 回答
HTTP重定向绑定要求在发送消息之前删除SAML消息本身上存在的任何
ds:Signature
元素:同时,HTTP-Redirect绑定要求将新的数字签名作为参数
Signature
附加到GET URL .这意味着使用HTTP重定向,您无法在消息级别上发送带有签名的消息,而是将签名添加到URL . 因此,从Spring SAML发送到IDP的整个消息都已签名(从SP发送的数据中检查) .
除了在断言中包含签名之外,没有标准方法强制IDP发送在消息级别上签名的响应消息 . 如果您正在使用SSL / TLS,则传输层将提供消息的真实性和不可否认性(数字签名的特征) .