Тайм-аут с мониторингом JMX на комплектах шифров, соединяющихся с Ssl

Хорошо, так что я работал над этим некоторое время, пытаясь понять это. У меня есть мониторинг JMX, работающий с одного клиента на сервер, но не с другого клиента на сервер. Мне кажется, единственное отличие состоит в том, что один - это RHEL6, а другой - RHEL7. Работает с RHEL6.

Итак, вот соответствующий код при получении MBeanServerConnection:

env.put(JMXConnector.CREDENTIALS, credentials);
env.put(RMIConnectorServer.RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE ,
    new SslRMIServerSocketFactory());
url = new JMXServiceURL(
    "service:jmx:rmi:///jndi/rmi://123.123.123.123:1234/jmxrmi");
jmxc = JMXConnectorFactory.connect(url, env);
mbsc = jmxc.getMBeanServerConnection();

Я компилирую с идентичными версиями jdk1.8.0_51 локально в /opt на обеих машинах. Хранилища ключей и трастовые хранилища, которые я создал, были впервые созданы на RHEL7, где это работает только с RHEL6. Я устанавливаю эти свойства во время выполнения (отформатирован для удобства чтения):

/opt/java/jdk1.8.0_51/bin/java -cp . 
-Djavax.net.ssl.keyStore=/path/to/keyStore.key 
-Djavax.net.ssl.keyStorePassword=keypassword 
-Djavax.net.ssl.trustStore=/path/to/trustStore.key 
-Djavax.net.ssl.trustStorePassword=trustpassword 
-Djavax.net.debug=all  
MonitoringProgram

Итак, что происходит, так это то, что с моего компьютера RHEL7 и отладки я получаю много выходных данных, а затем он зависает после этого последнего вывода:

Ignoring unavailable cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
Ignoring unavailable cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA
Ignoring unavailable cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Ignoring unavailable cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Когда мне придется убить программу или ждать очень долго ожидания. Теперь та же самая программа с отладкой имеет все те же выходные данные (я сравнил их с diff) до тех пор, но продолжается вместо заморозки

Ignoring unavailable cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
Ignoring unavailable cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA
Ignoring unavailable cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Ignoring unavailable cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Allow unsafe renegotiation: false
Allow legacy hello messages: true
... 

С большим количеством вывода из-за debug=all и с моим ожидаемым выводом (сейчас просто пытаюсь получить домены сервера mbean).

Так что может быть причиной этой разницы? Хуже всего то, что соединение просто зависает, а не вызывает исключение, которое я мог бы отладить. Я пытался воссоздать хранилище ключей пару раз, но я не думаю, что это больше. Я думал, что это может быть связано с недоступными комплектами шифров, но рабочий экземпляр имеет те же недоступные комплекты шифров, прежде чем остановиться на этом наборе шифров: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 с TLSv1.2. Помните, у него будет точно такой же вывод, пока он не зависнет, поэтому я не уверен, что инструмент отладки позволит мне полностью решить эту проблему.

Любые идеи или вклад будет принята с благодарностью.

Изменить: я добавляю стека трассировки тайм-аут подключения, должен был бы добавить это в первую очередь. Все еще работаем над решением.

java.rmi.ConnectException: Connection refused to host: 123.123.123.123; nested exception is:
        java.net.ConnectException: Connection timed out
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
        at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
        at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2432)
        at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:308)
        at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270)
        at MonitoringProgram.getMBeanServerConnection(MonitoringProgram.java:173)
        at MonitoringProgram.main(MonitoringProgram.java:208)
Caused by: java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)
        at sun.security.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:427)
        at sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:88)
        at javax.rmi.ssl.SslRMIClientSocketFactory.createSocket(SslRMIClientSocketFactory.java:121)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
        ... 9 more
Error: Connection refused

0 ответов

Другие вопросы по тегам