Keycloak与ActiveMQ Artemis集成HTTPS登录失败问题咨询
问题解答
是的,你需要将Keycloak的SSL证书添加到ActiveMQ Artemis的信任库中。
错误原因分析
日志里的javax.net.ssl.SSLHandshakeException: PKIX path building failed明确说明:ActiveMQ Artemis的JVM无法验证Keycloak的SSL证书,找不到有效的证书信任路径。HTTP环境下无需证书验证,所以能正常登录;启用HTTPS后,Artemis集成的Keycloak适配器作为客户端,必须信任Keycloak的证书才能完成SSL握手。
具体操作步骤
1. 获取Keycloak的SSL证书
- 如果Keycloak用的是自签名证书,可通过以下命令从Keycloak服务导出证书:
openssl s_client -connect xx.xx.xxx.xxx:8443 </dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > keycloak.crt - 如果Keycloak使用CA签发的证书,直接获取对应的根CA证书即可。
2. 将证书导入ActiveMQ Artemis的信任库
找到Artemis使用的JVM信任库(默认路径通常为$ARTEMIS_HOME/lib/security/cacerts,也可使用自定义信任库),用keytool命令导入证书:
keytool -importcert -file keycloak.crt -alias keycloak-cert -keystore /path/to/artemis-truststore.jks -storepass changeit
- 替换
/path/to/artemis-truststore.jks为实际信任库路径,默认cacerts的密码是changeit,根据实际情况修改。
3. 配置Artemis使用信任库
修改ActiveMQ Artemis的启动参数,指定信任库信息:
- 本地部署时,修改
artemis.profile文件,添加JVM参数:-Djavax.net.ssl.trustStore=/path/to/artemis-truststore.jks -Djavax.net.ssl.trustStorePassword=changeit - AKS部署时,更新Artemis的Deployment资源,在容器的
args或环境变量中添加上述JVM参数,确保Pod启动时加载信任库配置。
补充说明
如果Keycloak的证书由公共CA签发,且Artemis使用的JVM信任库已包含该CA的根证书,则无需单独导入Keycloak证书,检查信任库是否包含对应CA证书即可。
内容的提问来源于stack exchange,提问作者Subhidh Agarwal
相关产品推荐
相关产品推荐

