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

jconsole,远程,监控,认证,java,jmx,应用,ssl,配置,连接 · 浏览次数 : 0

小编点评

**生成内容时需要带简单的排版** **1. 导入依赖** ```java import java.security.keystore.*; ``` **2. 创建密钥对** ```java keystore keystore = new keystore(); keystore.setPassword("123456"); keystore.keystoreType("SSL"); ``` **3. 将证书导入到 truststore** ```java truststore.store(keystore.getCertificate()); truststore.setPassword("123456"); ``` **4. 创建密钥对** ```java keystore keystore = new keystore(); keystore.setPassword("123456"); keystore.keystoreType("SSL"); keystore.keystoreType("JKS"); ``` **5. 将证书导入到 keystore** ```java keystore.store(keystore.getCertificate()); keystore.setPassword("123456"); ``` **6. 设置 truststore password** ```java keystore.setPassword("123456"); ``` **7. 使用 KeyStore 进行认证** ```java keystore.store(keystore.getCertificate()); keystore.setPassword("123456"); ``` **8. 获取 KeyStore 的证书** ```java keystore.getCertificate(); ```

正文

知识普及

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
  • 1

参数解释:

-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 #关闭密码身份认证
  • 1
  • 2
  • 3
  • 4
  • 5

执行远程非认证连接:

连接操作图

所参考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
  • 1

执行命令启动应用:

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
  • 1

执行远程密码认证连接:

远程密码连接

效果图:

效果图

所参考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"
  • 1

参数说明:

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

参数说明:

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

执行成后会看到受信密钥库如下:
收信密钥库
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
  1. 导出应用app的证书
keytool -exportcert -alias app -storetype pkcs12 -keystore app.keystore -file app.cer -storepass 123456
  • 1
  1. 将应用的证书导入到jconsole的truststore(受信的密钥库)中:
keytool -importcert -alias app -file app.cer -keystore app-ssl.truststore -storepass 123456 -noprompt
  • 1
  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
  • 1

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
  • 1

参数说明:

-Djavax.net.ssl.trustStore=${path} 受信密钥库路径
 -Djavax.net.ssl.trustStorePassword=123456 受信密钥库密码
  • 1
  • 2
  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
  • 1

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
网络技能树首页概览22395 人正在系统学习中

与[转帖]jconsole远程监控认证,java远程监控,jmx监控应用,jmx ssl配置,jconsole ssl连接远程应用相似的内容:

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

知识普及 jmx JMX(java Management Extensions)是一个Java平台的管理和监控接口。任何程序,只要按JMX规范访问这个接口,就可以获取所有管理与监控信息,jconsole与Java VisualVM等常见监测工具都是基于jmx,JMX不但可以用于管理JVM,还可以管理

[转帖]JVM性能调优监控工具

原文 https://www.cnblogs.com/haiyang1985/p/7654654.html 摘要: JDK自己提供了不少方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本

[转帖]引人入胜,实战讲解“Java性能调优六大工具”之linux命令行工具

Java性能调优六大工具之Linux命令行工具 为了能准确获得程序的性能信息,需要使用各种辅助工具。本章将着重介绍用于系统性能分析的各种工具。熟练掌握这些工具,对性能瓶颈定位和系统故障排查都很有帮助。 1,Linux命令行工具2, Windows工具3,JDK命令行工具4,JConsole工具5,

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打