開發 Liberty 設定檔的 JMX Java 用戶端
您可以開發 Java™ 管理延伸 (JMX) 用戶端應用程式來存取 Liberty 設定檔的安全 REST 連接器。
關於這項作業
您可以利用 JMX 遠端用戶端應用程式,透過 JMX 程式設計來管理 Liberty 設定檔。
程序
- 依照下列方式來開發 JMX 用戶端範例。
REST 連接器支援標準 JMX API。
import javax.management.remote.JMXServiceURL; import javax.management.MBeanServerConnection; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import java.util.HashMap; public class Test { public static void main(String[] args) { System.setProperty("javax.net.ssl.trustStore", <truststore location>); System.setProperty("javax.net.ssl.trustStorePassword", <truststore password>); //如果 trustStore 類型不是預設的 jks, //便利用下面這一行來設定類型。 System.setProperty("javax.net.ssl.trustStoreType", <truststore type>); try { HashMap<String, Object> environment = new HashMap<String, Object>(); environment.put("jmx.remote.protocol.provider.pkgs", "com.ibm.ws.jmx.connector.client"); environment.put(JMXConnector.CREDENTIALS, new String[] { "bob", "bobpassword" }); JMXServiceURL url = new JMXServiceURL("service:jmx:rest://<host>:<port>/IBMJMXConnectorREST"); JMXConnector connector = JMXConnectorFactory.newJMXConnector(url, environment); connector.connect(); MBeanServerConnection mbsc = connector.getMBeanServerConnection(); } catch(Throwable t) { ... } } }
- 選擇性的: 停用 SSL 憑證的主機名稱驗證。
隨著 Liberty 設定檔安裝的憑證不一定會包含實際執行伺服器的主機名稱。如果您想要停用 SSL 憑證的主機名稱驗證,您可以將系統內容 com.ibm.ws.jmx.connector.client.disableURLHostnameVerification 設為 true,以停用所有連線的主機名稱驗證。
如果要在個別連線的基礎上停用主機名稱驗證,請在建立 JMX 連線時,將這個內容當作新的 environment 來傳遞:
HashMap<String, Object> environment = new HashMap<String, Object>(); environment.put("jmx.remote.protocol.provider.pkgs", "com.ibm.ws.jmx.connector.client"); environment.put("com.ibm.ws.jmx.connector.client.disableURLHostnameVerification", Boolean.TRUE); environment.put(JMXConnector.CREDENTIALS, new String[] { "bob", "bobpassword" }); ...
- 選擇性的: 利用環境 Map 來配置 JMX REST 連接器設定。
... HashMap<String, Object> environment = new HashMap<String, Object>(); environment.put("com.ibm.ws.jmx.connector.client.rest.maxServerWaitTime", 0); environment.put("com.ibm.ws.jmx.connector.client.rest.notificationDeliveryInterval", 65000); ...
- 選擇性的: Liberty REST 連接器可讓您指定可用來取得 Socket 的自訂 SSL Socket Factory。如果顯示異常狀況 javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: PKIX path building failed: java.security.cert.CertPathBuilderException: unable to find valid certification path to requested target,您可以從自己的金鑰儲存庫建立自己的 SSLContext,然後透過 REST 連接器,從該環境定義使用 SocketFactory。
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); InputStream inputStream = new FileInputStream("myTrustStore.jks"); trustStore.load(inputStream, "password".toCharArray()); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trustStore); TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustManagers, null); Map<String, Object> environment = new HashMap<String, Object>(); environment.put(ConnectorSettings.CUSTOM_SSLSOCKETFACTORY, sslContext.getSocketFactory()); environment.put(ConnectorSettings.DISABLE_HOSTNAME_VERIFICATION, true); environment.put("jmx.remote.protocol.provider.pkgs", "com.ibm.ws.jmx.connector.client"); environment.put(JMXConnector.CREDENTIALS, new String[] { "admin", "password" }); JMXServiceURL url = new JMXServiceURL("REST", "myhost", 9443, "/IBMJMXConnectorREST"); jmxConn = JMXConnectorFactory.connect(url, environment);
相關工作: