在 JMX 上启用 SSL 后无法使用 jconsole 连接到节点

问题描述 投票:0回答:1

我正在使用 Cassandra 4 并启用了 SSL。

为了连接到 JMX,我在 cassandra-env.sh 中添加了以下选项并启动了 Cassandra

JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.registry.ssl=true"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.need.client.auth=false"

JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=/home/murali/cassandra/cassandra4.0.13/conf/certs/keystore.cass4"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=cassandra"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStore=/home/murali/cassandra/cassandra4.0.13/conf/certs/cassandra4.client.truststore.jks"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStorePassword=cassandra"

#JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.protocols=TLSv1.2"
#JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.cipher.suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"

尝试如下连接 JConsole,

$ jconsole -J-Djavax.net.ssl.keyStore=certs/keystore.cass4
  -J-Djavax.net.ssl.keyStorePassword=cassandra 
  -J-Djavax.net.ssl.trustStore=certs/cassandra4.client.truststore.jks
  -J-Djavax.net.ssl.trustStorePassword=cassandra

但是使用JMX SSL连接失败。

并尝试使用 javax.rmi 包连接 java 代码,并抛出以下错误。

java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException \[Root exception is java.rmi.NoSuchObjectException: no such object in table\]

注意:jConsole 和 java 使用了 jdk 8 和 11,但错误是相同的。

请告诉我们您对成功连接 JMX 和查看 Cassandra 指标的建议。

java ssl cassandra jmx jconsole
1个回答
0
投票

如果没有 (1) 完整的错误消息和 (2) 完整的堆栈跟踪,就不可能知道失败的原因,但通常至少是以下一种(或多种):

  • 密钥库无效
  • 密钥库密码无效
  • 信任库无效
  • 信任库密码无效

另一件事需要注意的是,您可能正在远程连接 jconsole。默认情况下,出于安全原因,远程 JMX 连接被禁用,因为它使节点容易受到攻击,因此 JMX 只能在

localhost
上访问。

要启用JMX远程访问,您需要取消注释

cassandra-env.sh
中的以下行:

# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>"

您需要使用可从运行 jconsole 的计算机访问的 IP 地址来配置它。然后紧接着该行添加:

LOCAL_JMX=no

请注意,您需要重新启动 Cassandra 才能使

cassandra-env.sh
中的更改生效。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.