Настройка SSL-соединения с использованием collectd GenericJMX
Я пишу конфигурацию для collectd для чтения данных из защищенного порта SSL/TLS JMX.
Я настроил что-то вроде этого (упрощенно):
LoadPlugin java
<Plugin "java">
JVMArg "-Djava.class.path=/opt/stackdriver/collectd/share/collectd/java/collectd-api.jar:/opt/stackdriver/collectd/share/collectd/java/generic-jmx.jar"
JVMArg "-Djavax.net.ssl.trustStore=/path/to/truststore.jks"
JVMArg "-Djavax.net.ssl.trustStorePassword=testpass"
JVMArg "-Djavax.net.ssl.keyStore=/path/to/keystore.jks"
JVMArg "-Djavax.net.ssl.keyStorePassword=testpass"
LoadPlugin "org.collectd.java.GenericJMX"
<Plugin "GenericJMX">
<MBean "cassandra_storageservice-load">
ObjectName "org.apache.cassandra.metrics:type=Storage,name=Load"
<Value>
Type "gauge"
InstancePrefix "storage_service-load"
Table false
Attribute "Count"
</Value>
</MBean>
<Connection>
ServiceURL "service:jmx:rmi:///jndi/rmi://localhost:7199/jmxrmi"
InstancePrefix "cassandra"
User "cassandra"
Password "jmxpass"
Collect "cassandra_storageservice-load"
</Connection>
</Plugin>
</Plugin>
Но все, что я получаю, это распространенная ошибка, показывающая, что клиент JMX ожидает соединения в виде открытого текста:
GenericJMXConfConnection: Creating MBean server connection failed: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]
Когда я отключаю SSL/TLS, я могу легко подключиться к порту JMX и получить данные, но отключить их нельзя. Цель - это порт JMX узла Cassandra, и мне нужно обеспечить его безопасность, поскольку подключение к Cassandra JMX также дает некоторый контроль над кластером, и он будет доступен в частной сети. Я не хочу, чтобы тексты летали. К сожалению, мне нужно сделать это с collectd.
Можно ли вообще заставить GenericJMX использовать SSL/TLS? И если да, то как это сделать? Предоставление сертификатов, похоже, ничего не делает.