WSO2 API Manager 4.0.0密钥管理器与Keycapture的集成不起作用



我已经学习了本教程https://apim.docs.wso2.com/en/latest/administer/key-managers/configure-keycloak-connector/用于将Keycap集成为密钥管理器与WSO2 API管理器4.0.0,所有操作都按所述进行,但当我尝试获取client_credentials access_token时,WSO2 http客户端-Keycap通信上出现错误,查看与foreign相关的跟踪。错误是:

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

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

部署.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" 

此外,此localhost证书在WSO2安装中导入到client-truststore.jks中。

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

WSO2 API管理器使用FeignOKHTTP客户端与Keycapture服务器进行通信。OKHTTP客户端需要具有与CN相同的SAN条目的公共证书。

Key斗篷的默认公共证书不包含任何SAN值。因此,当尝试与Keycloft通信时,Feign客户端开始抛出SSL异常。为了克服这一问题,您可以按照本文档的要求,为Keycapture创建一个新的Keystore,并将该证书导入API管理器的client-truststore.jks中。上述keytool命令生成带有SAN条目的密钥库和证书。

Given是API管理器文档中的相同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客户端中的主机名验证。

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

从这里收集了一些与OKHTTP客户端有关的要点。希望这能帮助你用另一种方法来克服这个问题。

最新更新