You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过SSL将Jconsole连接至GCP上的Java应用(经JNDI连接JMX)

解决Jconsole通过SSL+JNDI RMI语法连接SpringBoot应用的问题

问题原因

non-JRMP server at remote endpoint错误的核心是:启用SSL后,服务端的JMX RMI端口已切换为SSL加密通信,但使用JNDI语法连接时,客户端未显式启用SSL,导致RMI尝试用明文JRMP协议连接SSL端口,出现协议不匹配。

正确配置与连接命令

1. 确认服务端VM参数(必须包含SSL相关配置)

确保SpringBoot应用的启动VM参数包含以下内容:

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.rmi.port=1234
-Dcom.sun.management.jmxremote.authenticate=false # 按需调整,此处关闭认证简化测试
-Dcom.sun.management.jmxremote.ssl=true
-Djavax.net.ssl.keyStore=server.keystore
-Djavax.net.ssl.keyStorePassword=qweasd
-Djava.rmi.server.hostname=localhost

注意:如果不分开设置注册表和Stub端口,jmxremote.rmi.port必须和jmxremote.port保持一致,避免端口映射混乱。

2. 客户端正确的Jconsole启动命令(带JNDI语法)

客户端需要同时指定信任库并强制JMX启用SSL,命令如下:

jconsole -debug \
-J-Djavax.net.ssl.trustStore=client.truststore \
-J-Djavax.net.ssl.trustStorePassword=qweasd \
-J-Dcom.sun.management.jmxremote.ssl=true \
service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi

关键注意点

  • 必须显式添加-Dcom.sun.management.jmxremote.ssl=true:仅指定信任库不足以触发SSL连接,必须强制JMX使用SSL协议与RMI通信。
  • 信任库有效性:client.truststore必须导入服务端server.keystore的证书,否则会出现SSL握手失败。
  • 端口一致性:服务端的jmxremote.port和jmxremote.rmi.port要与JNDI URL中的端口保持一致。

内容的提问来源于stack exchange,提问作者bua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:35:00