问题描述

在完成 Keycloak 对接后,Keycloak 登录页面可以正常显示,用户也可以正常登录,但是最后 GP 显示认证失败:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_globalprotect

问题分析

在 GlobalProtect 以及 Keycloak 中均为发现明显的错误,但是在 system 日志中看到下列信息:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Keycloak_02

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”配置:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Keycloak_03

相应的在 Authentication Profile中不设置签名证书:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_globalprotect_04

Keycloak 侧保持 Client Signature required 为 Off(默认):

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Paloalto_05

方式2:Keycloak中生成签名证书,加载到防火墙

默认导入Keycloak的xml后会有下列两个选项:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Keycloak_06

  1. Keycloak会对自己发送的SAML进行签名(使用图中自动导入的证书crt.keycloak-gp.shared),用户不需要额外配置。
  2. GlobalProtect按需对发送的SAML进行签名(通过下面的Sign SAML Message to IDP进行控制,一旦勾选就需要额外的配置),需要额外的配置。

在勾选Sign SAML Message to IDP后,需要先在Keycloak中产生Client key,再导入到防火墙中并应用。具体配置如下:


点击Keycloak中相应的Client

GlobalProtect 对接 SMAL 认证报 Authentication Failed_globalprotect_07

选择Keys菜单,开启“Client signature required”

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Keycloak_08

然后选择Generate:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_saml_09

系统会自动生成证书,并下载private key文件,点击Confirm即可。

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Paloalto_10

接着点击Export,导出PKCS12格式的证书,会再次下载一个PKCS12文件的证书:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Paloalto_11

GlobalProtect 对接 SMAL 认证报 Authentication Failed_globalprotect_12

返回到防火墙的证书管理界面,点击导入:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_saml_13

GlobalProtect 对接 SMAL 认证报 Authentication Failed_saml_14

导入完成后确保CA和KEY都被正确导入:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Keycloak_15

编辑之前创建的Authentication Profile,勾选刚才创建的证书:

GlobalProtect 对接 SMAL 认证报 Authentication Failed_Keycloak_16

然后保存并Commit即可。