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
客户相关的几个要点。希望这可以帮助您通过替代方法解决问题。
我已经按照本教程 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
客户相关的几个要点。希望这可以帮助您通过替代方法解决问题。