J'utilise le code suivant pour créer un serveur JMX personnalisé avec TLS et JMXMP en suivant la documentation Oracle. Cela fonctionne bien et je peux me connecter au serveur sans problème, cependant je voudrais ajouter "USER" et "PASSWORD" à l'authentification, cependant en spécifiant le "password.properties" et le "access.properties" ne fonctionne pas, JMX semble ignorer ces deux options. Quelqu'un peut-il faire la lumière sur la façon correcte de configurer USER et PASSWORD et corriger ce problème? MerciComment s'authentifier avec un utilisateur et un mot de passe en utilisant le serveur JMX personnalisé en utilisant TLS et JMXMP
private JMXServiceURL url() {
final String url = String.format("service:jmx:jmxmp://%s:%s", host(), port());
try {
return new JMXServiceURL(url);
} catch(Throwable exception) {
throw new RuntimeException(String.format("Failed to create JMX Service URL: %s", url), exception);
}
}
private Map<String, Object> env() {
final Map<String, Object> env = new LinkedHashMap<String, Object>();
try {
String keystore = "jmx.keystore";
char keystorepass[] = "12345678".toCharArray();
char keypassword[] = "12345678".toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore), keystorepass);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, keypassword);
SSLContext ctx = SSLContext.getInstance("TLSv1");
ctx.init(kmf.getKeyManagers(), null, null);
SSLSocketFactory ssf = ctx.getSocketFactory();
env.put("jmx.remote.profiles", "TLS");
env.put("jmx.remote.tls.socket.factory", ssf);
env.put("jmx.remote.tls.enabled.protocols", "TLSv1");
env.put("jmx.remote.tls.enabled.cipher.suites","SSL_RSA_WITH_NULL_MD5");
env.put("jmx.remote.x.password.file", "password.properties");
env.put("jmx.remote.x.access.file","access.properties");
} catch (Exception e) {
e.printStackTrace();
}
return env;
}
private MBeanServer server() {
return ManagementFactory.getPlatformMBeanServer();
}
private JMXConnectorServer connector() {
try {
ServerProvider.class.getName();
return JMXConnectorServerFactory.newJMXConnectorServer(url(), env(), server());
}catch(Throwable exception) {
throw new RuntimeException("Failed to create JMX connector server factory", exception);
}
}
Comment êtes-vous arrivé à cela? –
Avez-vous dû configurer le client de la même manière? – Adam
Oui, vous devez configurer le client pour qu'il utilise également ce type d'authentification –