gpt4 book ai didi

ssl - 如何在docker中的应用程序上设置远程访问SSL JMX接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:33 25 4
gpt4 key购买 nike

这是从“How to access JMX interface in docker from outside?”开始的,它讨论了设置未加密的 JMX 连接。

我可以使用 RMIGlassfish 使用的 JMXMP

有一组 JVM 选项是必需的,我正在寻找使用 SSL 设置 JMX 所需的更改:

com.sun.management.jmxremote=true
com.sun.management.jmxremote.local.only=false
com.sun.management.jmxremote.ssl=true
com.sun.management.jmxremote.authenticate=true
com.sun.management.jmxremote.port=12345
com.sun.management.jmxremote.rmi.port=12346
java.rmi.server.hostname=10.11.12.176
com.sun.management.jmxremote.access.file=/.secure/jmxremote.access
com.sun.management.jmxremote.password.file=/.secure/jmxremote.pass
com.sun.management.jmxremote.login.config=ldap-ad-config
java.net.preferIPv4Stack=true
com.sun.management.jmxremote.ssl.config.file=/.secure/jmxremotessl.properties
javax.net.ssl.keyStore=/config/app.jks
javax.net.ssl.keyStorePassword=teabag
javax.net.ssl.trustStore=/config/cacerts
javax.net.ssl.trustStorePassword=milk

问题是一样的:

java.rmi.ConnectException: Connection refused to host: 172.0.0.85; nested exception is
java.net.ConnectException: Operation timed out

该 IP 地址是 docker 容器的内部 IP 地址。尽管有 java.rmi.server.hostname 解决方案,但我认为这种情况仍在发生,因为它在 SSL 上。

我尝试使用 nginx 将 SSL 反向代理为非 SSL,但失败并出现错误

java.rmi.ConnectIOException: non-JRMP server at remote endpoint

所以我想我应该在 nginx 中转发额外的 header 。

我现在正在尝试设置 JMXMP,但有关如何设置的文档非常稀少。有一个 Spring 实现和一个 Glassfish 实现,但没有可找到的文档(目前)——所以我添加了 glassfish 标签。

最佳答案

答案是我可以将我的应用程序设置为使用 JMXMP 并将其配置为使用这些 JVM 选项实现 TLS 连接:

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.ssl=true
-Dcom.sun.management.jmxremote.access.file=C:/dev/.secure/jmxremote.access
-Dcom.sun.management.jmxremote.password.file=C:/dev/.secure/jmxremote.pass
-Dcom.sun.management.jmxremote.login.config=spnego-server
-Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote.ssl.config.file=/.secure/jmxremotessl.properties

但是我必须编写一个配置类来启动 JMXConnectorServer,如下所示:

@Configuration
public class JmxServer {

public JmxServer(
@Value("${jmx.remote.hostname}") final String hostname,
@Value("${jmx.remote.port}") final String port) {
try {
Map<String, Object> env = new HashMap<>();
env.put("jmx.remote.profiles", "TLS SASL/PLAIN");
env.put(JMXConnector.CREDENTIALS,
new String[] {"myusername", "password"});
JMXConnectorServerFactory.newJMXConnectorServer(
new JMXServiceURL(
String.format("service:jmx:jmxmp://%s:%s",
hostname, port)),
env,
ManagementFactory.getPlatformMBeanServer()
).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}

但这只是其中的一半。我现在正在与 JConsole 争吵,让它用 TLS 执行 JMXMP

为此,我在 Oracle 论坛上关注 2007 年的化石问题:

Can JConsole connect to a remote JMX agent using JMXMP and TLS?

但仍在挣扎......

关于ssl - 如何在docker中的应用程序上设置远程访问SSL JMX接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48288310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com