2016-09-05 2 views
9

JMX 클라이언트 (예 : JConsole)에서 TLS/SSL 보안 연결을 처리하도록 기본 JMX 커넥터를 구성하는 방법을 잘 설명합니다.SSL을 처리하는 JMXConnectorServer 구현

-Dcom.sun.management.jmxremote.port=6789 \ 
-Dcom.sun.management.jmxremote.authenticate=false \ 
-Dcom.sun.management.jmxremote.ssl=true \ 
-Djavax.net.ssl.keyStore=/path/to/the/keystore.jks \ 
-Djavax.net.ssl.keyStorePassword=secr3t 

이 커넥터와 함께 JConsole을 사용하면 '보안 연결에 실패했습니다.'라는 경고가 표시되지 않습니다. 재검토가 불안정한가? '라고 말하면서 일부 사용자는 깜짝 놀랄만하다 (경고가 아니라 예방).

JMXConnectorServer을 빌드 할 때 프로그래밍 방식으로 어떻게 동일한 결과를 얻을 수 있는지에 대해서는 잘 설명되어 있지 않습니다.

JMXConnectorServerFactory.newJMXConnectorServer(url, env, mBeanServerFactory); 

누구든지 입증 된 예제를 참조 할 수 있습니까? RMIRegistry 건물에도 동일하게 적용됩니다. 나는 가장 감사해야한다.

M.

+0

속성'javax.net.ssl. *'은 JMX와 관련이 없지만 java의 전체 SSL 인프라와 관련이 있습니다. 이러한 인수를 명령 줄에서 전달하고 jmx 서버를 프로그래밍 방식으로 시작하거나 이러한 등록 정보를 * env * 객체에 넣을 수 있습니다. –

답변

2
Properties props = new Properties(); 
props.setProperty("com.sun.management.jmxremote.authenticate", "false"); 
props.setProperty("com.sun.management.jmxremote.ssl", "true"); 
props.setProperty("com.sun.management.jmxremote.registry.ssl", "true"); 

// Either set SSL properties via System.setProperty() or load an external config file 
// props.setProperty("com.sun.management.jmxremote.ssl.config.file", 
//     "/path/to/ssl.properties"); 

System.setProperty("javax.net.ssl.keyStore", "/path/to/the/keystore.jks"); 
System.setProperty("javax.net.ssl.keyStorePassword", "secr3t"); 

JMXConnectorServer server = sun.management.jmxremote.ConnectorBootstrap 
     .startRemoteConnectorServer("6789", props); 

이 프로그래밍 SSL 인식 JMXConnectorServer를 시작하는 가장 쉬운 방법입니다. 개인 sun.management API를 사용합니다. 비공개 API 없이도이 작업을 수행 할 수 있지만 로직을 많이 복제해야합니다 (ConnectorBootstrap).

관련 문제