我已经学习了本教程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
客户端有关的要点。希望这能帮助你用另一种方法来克服这个问题。