【问题标题】:WSO2 API Manager 4.0.0 Key Manager integration with Keycloak not workingWSO2 API Manager 4.0.0 Key Manager 与 Keycloak 的集成不起作用
【发布时间】:2021-09-13 09:48:33
【问题描述】:

我已按照本教程 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

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

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" 

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

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

【问题讨论】:

  • 您是否尝试按照上述文档中的说明为密钥库生成自签名证书?或者您使用的是 Keycloak 生成的默认证书?
  • 我在独立文件夹内的 keystore application.keystore 中使用由 keycloak 生成的默认证书。在指南中说您可以使用该证书。这是我在 WSO2 client-truststore.jks 中导入的一个

标签: wso2 keycloak wso2is wso2-am


【解决方案1】:

WSO2 API Manager 使用 Feign OKHTTP 客户端与 Keycloak 服务器进行通信。 OKHTTP 客户端需要与CN 相同的SAN 条目的公共证书。

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

Given 与 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 生成新的 Keystore)来克服它。

here 收集到与OKHTTP 客户端相关的一些点。希望这可以帮助您通过另一种方法克服这个问题。

【讨论】:

  • 使用您提供的 keytool 命令创建证书后,它可以完美运行。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 2018-04-15
相关资源
最近更新 更多