jconsole远程监控认证,java远程监控,jmx监控应用,jmx ssl配置,jconsole ssl连接远程应用

知识普及

jmx

JMX(java Management Extensions)是一个Java平台的管理和监控接口。任何程序,只要按JMX规范访问这个接口,就可以获取所有管理与监控信息,jconsole与Java VisualVM等常见监测工具都是基于jmx,JMX不但可以用于管理JVM,还可以管理应用程序自身。
JMX把所有被管理的资源都称为MBean(Managed Bean),MBean全部由MBeanServer管理,如果要访问MBean,可以通过MBeanServer对外提供的访问接口,例如RMI或HTTP。

jconsole

JConsole 是一个内置的 Java 性能分析器,具备相对完善的图形界面。可以轻松地使用 JConsole来监控 Java 应用程序性能和跟踪 Java 代码。

其他监测工具

  1. Java VisualVM
  2. JProfiler

使用jconsole连接远程应用

准备

  1. java版本: 1.11/1.8
  2. 确保jmx监听的端口可通,可以通过telnet命令测试

1:非认证远程连接应用

命令:

java -Dcom.sun.management.jmxremote.port=8079 -Dcom.sun.management.jmxremote.rmi.port=8079 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${ip} -jar demo-0.0.1-SNAPSHOT.jar

参数解释:

-Djava.rmi.server.hostname=${ip}  #远程服务器ip
-Dcom.sun.management.jmxremote.port=${port}  #jmx 端口号
-Dcom.sun.management.jmxremote.rmi.port={port} #rmi连接端口号
-Dcom.sun.management.jmxremote.ssl=false  # 关闭ssl
-Dcom.sun.management.jmxremote.authenticate=false #关闭密码身份认证

执行远程非认证连接:

连接操作图

所参考oracle文档:

https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html#gdeum

2:使用密码远程连接应用

创建jmx授权用户并赋予权限:

  1. 进入$JAVA_HOME/conf/management/目录,java8是在 $JAVA_HOME/jre/lib/management目录
  2. 参照目录下的jmxremote.password.template文件创建jmxremote.password
  3. 在jmxremote.password新建用户名与密码
    新增用户图
  4. 在本目录的jmxremote.access文件为新增用户设置权限,这里我设置为只读
    设置权限图
  5. 将jmxremote.password文件复制到jar包目录,这一步可省略
  6. 设置文件权限,命令如下
chmod 600 jmxremote.password

执行命令启动应用:

java -Dcom.sun.management.jmxremote.port=8079 -Dcom.sun.management.jmxremote.rmi.port= 8079 - Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${ip} -Dcom.sun.management.jmxremote.password.file=${jmxremote.password} -jar demo-0.0.1-SNAPSHOT.jar

执行远程密码认证连接:

远程密码连接

效果图:

效果图

所参考oracle文档:

https://docs.oracle.com/javadb/10.10.1.2/adminguide/radminjmxenablepwd.html

说明:

生产环境jmx远程连接建议使用ssl证书认证方式,此种方式更加安全,这里我给只读用户使用密码认证只是个例子。

3:使用数字证书远程连接应用

说明

  1. java8此步骤需要用到密码认证方式的用户名与密码,java11不需要。
  2. 认证原理图:
    在这里插入图片描述
    从图中可以看出我们需要给客户端与服务端都生成密钥对,同时双方的受信密钥库都包含对方的公钥,这样就确保只有公钥在服务端的受信密钥库中的jconsole才被允许连接,这与web https有点不同,不过原理是差不多的。

为jconsole生成ssl证书

  1. 进入$JAVA_HOME/bin目录,java8是在 $JAVA_HOME/jre/bin目录,
  2. 执行如下命令生成密钥对:
keytool -genkeypair -alias jconsole -keyalg RSA -validity 365 -storetype pkcs12 -keystore jconsole.keystore -storepass 123456 -keypass 123456 -dname "CN=名称,OU=组织下属单位,O=组织名,L=城市,S=省份,C=CN"

参数说明:

-alias jconsole  密钥对别名为jconsole
-keystore jconsole.keystore 密钥库名称为jconsole.keystore
-storepass 123456 存储密码为123456
-keypass 123456 密钥密码为123456
-dname 证书申请实体信息
  1. 执行如下命令导出证书:
keytool -exportcert -alias jconsole -storetype pkcs12 -keystore jconsole.keystore -file jconsole.cer -storepass 123456
  1. 查看生成结果:
    前2步骤顺利的话会在当前文件夹看到以下文件:
    生成结果
  2. 执行命令将证书导入到应用的truststore(受信的密钥库)中:
keytool -importcert -alias jconsole -file jconsole.cer -keystore jconsole-ssl.truststore -storepass 123456 -noprompt

参数说明:

-storepass 123456 受信密钥库密码为123456

执行成后会看到受信密钥库如下:
收信密钥库
6. 将受信密钥库上传的应用服务器
7. 生成服务端应用的密钥对

keytool -genkeypair -alias app -keyalg RSA -validity 365 -storetype pkcs12 -keystore app.keystore -storepass 123456 -keypass 123456 -dname "CN=app名称,OU=app组织下属单位,O=app组织名,L=城市,S=省份,C=CN"
  1. 导出应用app的证书
keytool -exportcert -alias app -storetype pkcs12 -keystore app.keystore -file app.cer -storepass 123456
  1. 将应用的证书导入到jconsole的truststore(受信的密钥库)中:
keytool -importcert -alias app -file app.cer -keystore app-ssl.truststore -storepass 123456 -noprompt
  1. 上传应用的密钥对到服务器
  2. 设置应用启动脚本如下:
    java8:
java -Dcom.sun.management.jmxremote.port=8079 -Dcom.sun.management.jmxremote.rmi.port=8079 -Djava.rmi.server.hostname=${ip} -Dcom.sun.management.jmxremote.password.file=${path} -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=true -Dcom.sun.management.jmxremote.registry.ssl=true -Dcom.sun.management.jmxremote.ssl.need.client.auth=true -Djavax.net.ssl.trustStore=/home/iic/jconsole-ssl.truststore -Djavax.net.ssl.trustStorePassword=123456 -Djavax.net.ssl.keyStore=${path} -Djavax.net.ssl.keyStorePassword=123456 -jar demo-0.0.1-SNAPSHOT.jar

java11:

java -Dcom.sun.management.jmxremote.port=8079 -Dcom.sun.management.jmxremote.rmi.port=8079 -Djava.rmi.server.hostname=${ip} -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=true -Dcom.sun.management.jmxremote.registry.ssl=true -Dcom.sun.management.jmxremote.ssl.need.client.auth=true -Djavax.net.ssl.trustStore=${path} -Djavax.net.ssl.trustStorePassword=123456 -Djavax.net.ssl.keyStore=${path} -Djavax.net.ssl.keyStorePassword=123456 -jar demo-0.0.1-SNAPSHOT.jar

参数说明:

-Djavax.net.ssl.trustStore=${path} 受信密钥库路径
 -Djavax.net.ssl.trustStorePassword=123456 受信密钥库密码
  1. 使用ssl连接远程服务,在jconsole目录执行以下命令:
jconsole -J-Djavax.net.ssl.trustStore=F:\professional\java-cert\app-ssl.truststore -J-Djavax.net.ssl.trustStorePassword=123456 -J-Djavax.net.ssl.keyStore=F:\professional\java-cert\jconsole.keystore -J-Djavax.net.ssl.keyStorePassword=123456

jconsole连接图
用户名和口令java8需要输入,java11直接跳过,密钥对与受信密钥库的密码一定不要搞错。
13. 效果图
ssl连接效果图
参考文档:
https://www.cleantutorials.com/jconsole/jconsole-ssl-with-password-authentication

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值