WSO2 API Manager 4.0.0 Key Manager 与 Keycloak 的集成不起作用

WSO2 API Manager 4.0.0 Key Manager integration with Keycloak not working

我已经按照本教程 https://apim.docs.wso2.com/en/latest/administer/key-managers/configure-keycloak-connector/ 将 Keycloak 作为密钥管理器与 WSO2 API Manager 4.0.0 集成,一切都按照描述完成,但是当我尝试获取 client_credentials access_token WSO2 http客户端-Keycloak通信出现错误,查看与feign相关的痕迹。错误是这样的:

Caused by: feign.RetryableException: Hostname localhost not verified:
    certificate: sha256/7mHCBc7ms9yqA/gz+nIRA9cUTRqrEgK3j9eX9fmpDZ0=
    DN: CN=localhost
    subjectAltNames: [] executing POST https://localhost:8443/auth/realms/master/clients-registrations/openid-connect

如错误跟踪中所述,这是主机名验证,因为主机名是本地主机。为了绕过这个,我将主机名验证设置为禁用,但它仍在发生。我不知道如何跳过此验证。这些是我的配置文件片段:

deployment.toml

[transport.passthru_https]
sender.hostname_verifier = "AllowAll"

[transport.passthru_https.sender.parameters]
HostnameVerifier = "AllowAll"

[transport.passthru_http]
sender.hostname_verifier = "AllowAll"

api-manager.bat

set CMD_LINE_ARGS=%CMD_LINE_ARGS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -Dorg.opensaml.httpclient.https.disableHostnameVerification=true -Dhttpclient.hostnameVerifier="AllowAll" 

此外,此本地主机证书在 WSO2 安装中的客户端-truststore.jks 中导入。

知道如何跳过此主机名验证吗?

WSO2 API 管理器使用 Feign OKHTTP 客户端与 Keycloak 服务器通信。 OKHTTP 客户端需要具有 SAN 条目的 public 证书,与 CN.

相同

Keycloak 的默认 public 证书不包含任何 SAN 值。因此,当尝试与 Keycloak 通信时,Feign 客户端开始抛出 SSL 异常。为了克服这个问题,您可以按照此 documentation,为 Keycloak 创建一个新的密钥库并将该证书导入 API 管理器的 client-truststore.jks。提到的 keytool 命令生成密钥库和带有 SAN 条目的证书。

给出的是来自 API Manager Docs 的相同 Keytool 命令。

keytool -genkey -alias server -keyalg RSA -keysize 2048 -validity 3650 -keystore application.keystore -dname "CN=localhost,OU=Support,O=WSO2,L=Colombo,S=Western,C=LK" -storepass password -keypass password -noprompt -ext SAN=dns:localhost

此外,上述 hostname_verifier 配置不适用于在 OKHTTP 客户端中禁用主机名验证。

对于您所面临的行为,这不是绝对的解决方案,但您可以使用这种替代方法(为 Keycloak 生成新的密钥库)来克服它。

收集了与 OKHTTP 客户相关的几个要点。希望这可以帮助您通过替代方法解决问题。