问题描述
在完成 Keycloak 对接后,Keycloak 登录页面可以正常显示,用户也可以正常登录,但是最后 GP 显示认证失败:
问题分析
在 GlobalProtect 以及 Keycloak 中均为发现明显的错误,但是在 system 日志中看到下列信息:
SAML signature in message from IdP "https://auth.halfcoffee.com/realms/globalprotect" can\'t be validated
Failed to verify signature against certificate of IdP "crt.keycloak-gp.shared"
这两个日志显示在交互时 SAML 签名验证有问题,于是查了下配置,发现 GP 和 Keycloak 默认会有双向的签名验证,所以如果证书配置不正确就会导致交互出问题。
具体解决办法如下:
方式1:防火墙侧不去做签名
SAML Identity Provider 中取消“Sign SAML Message to IDP”配置:
相应的在 Authentication Profile中不设置签名证书:
Keycloak 侧保持 Client Signature required 为 Off(默认):
方式2:Keycloak中生成签名证书,加载到防火墙
默认导入Keycloak的xml后会有下列两个选项:
- Keycloak会对自己发送的SAML进行签名(使用图中自动导入的证书crt.keycloak-gp.shared),用户不需要额外配置。
- GlobalProtect按需对发送的SAML进行签名(通过下面的Sign SAML Message to IDP进行控制,一旦勾选就需要额外的配置),需要额外的配置。
在勾选Sign SAML Message to IDP后,需要先在Keycloak中产生Client key,再导入到防火墙中并应用。具体配置如下:
点击Keycloak中相应的Client
选择Keys菜单,开启“Client signature required”
然后选择Generate:
系统会自动生成证书,并下载private key文件,点击Confirm即可。
接着点击Export,导出PKCS12格式的证书,会再次下载一个PKCS12文件的证书:
返回到防火墙的证书管理界面,点击导入:
导入完成后确保CA和KEY都被正确导入:
编辑之前创建的Authentication Profile,勾选刚才创建的证书:
然后保存并Commit即可。