jvisualvm ssl远程连接JVM

news2024/11/20 14:22:38
jvisualvm 远程ssl连接

一、没认证的 JMX连接 (不安全)

这种方式,仅限于测试环境,可以这样操作。生产环境为了安全起见,还是要使用带认证的方式连接。

  1. 远程jar包服务 启动时 java -jar [jvm参数] xx.jar添加JVM参数

    java -jar -Xmx512M -Xms256m -Djava.rmi.server.hostname=IP -Dcom.sun.management.jmxremote.port=1232 -Dcom.sun.management.jmxremote.rmi.port=1233 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false    xxl-job-admin-2.4.0.jar 
    

    参数解释:

    -Djava.rmi.server.hostname=IP \ 
    # 开启jvm远程监控端口
    -Dcom.sun.management.jmxremote.port=1232 \
    # 开启jvm远程管理端口,用于执行某些jvm命令
    -Dcom.sun.management.jmxremote.rmi.port=1233 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false 
    
  2. xxx云 ,安全组策略, 入站规则放开 1232,1233端口

  3. ctrl + R输入 jvisualvm ,然后选择 “文件 –》 添加远程主机 ”

添加远程主机

  1. 右键 - 》 添加 JMX 连接。

添加JMX连接

二、SSL证书认证的JMX连接(安全)

需要提前生成 SSL认证的证书。

1. 进入生成证书的目录,并执行脚本

cd /mydata/xxl_job
# 内容比较多, 就写成一个shell脚本, 将需要参数传入即可 
vim jvisualvm_keyStore.sh

# 将下面一段脚本复制拷贝,然后 wq 保存退出。
# 授可执行权限
chmod 755 jvisualvm_keyStore.sh

# 脚本提取了参数,支持如下两个命令:
 ##  -h:自定义ip或域名,-p:自定义密码  -d:自定义证书有效期,默认365天
sh jvisualvm_keyStore.sh -h  [HOSTNAME] -p [PASSWORD] -d [TIME_DAY] 
 ## 或者 使用自定义密码生成秘钥
sh jvisualvm_keyStore.sh -p [PASSWORD]   
 ## 或者 使用自定义域名ip,使用默认密码生成秘钥
sh jvisualvm_keyStore.sh -h [HOSTNAME]   

2. 一键生成密钥脚本:

#!/bin/bash

#============================================#
#   下面为生成密钥及相关信息配置,注意修改   #
#============================================#
# 默认变量值
	# 客户端密钥文件别名
CLIENT_ALIAS=visualvm
	# 服务端密钥文件别名
SERVICE_ALIAS=visualvm-server
	# 默认密码 
PASSWORD="study@1024"
	# 默认域名或ip
HOSTNAME="default_hostname"
	# 有效天数, 默认设置1年
TIME_DAY=365

# 解析参数
while getopts ":h:p:d:" opt; do
  case ${opt} in
    h )
      HOSTNAME=$OPTARG
      ;;
    p )
      PASSWORD=$OPTARG
      ;;
    d )
      TIME_DAY=$OPTARG
      ;;
    \?)
      echo "Invalid option: -$OPTARG" 1>&2
      echo "USER: sh ${0} -h [HOSTNAME] -p [PASSWORD] -d [TIME_DAY]" 1>&2
      exit 1
      ;;
    : )
      echo "Invalid option: -$OPTARG requires an argument" 1>&2
      echo "USER: sh ${0} -h [HOSTNAME] -p [PASSWORD] -d [TIME_DAY]" 1>&2
      exit 1
      ;;
  esac
done

# 使用 shift 命令将处理过的参数移除,确保后面不再跟随任何非法参数
shift $((OPTIND -1))

# 如果只输入 -h 参数,则使用默认密码
if [ "$PASSWORD" == "study@1024" ] && [ "$HOSTNAME" != "default_hostname" ]; then
  echo "Using default password"
# 如果只输入 -p 参数,则使用默认 hostname
elif [ "$PASSWORD" != "study@1024" ] && [ "$HOSTNAME" == "default_hostname" ]; then
  echo "Using default hostname"
# 如果同时输入 -h 和 -p 参数,则使用用户指定的值
elif [ "$PASSWORD" != "study@1024" ] && [ "$HOSTNAME" != "default_hostname" ]; then
  echo "Using specified values"
else
  echo "Invalid arguments: $@" 1>&2
  echo "USER: sh ${0} -h [HOSTNAME] -p [PASSWORD] -d [TIME_DAY]" 1>&2
  echo "OR USER: sh ${0} -h [HOSTNAME]  ,This will use the default password" 1>&2
  exit 1
fi

# 输出变量值
echo "password: $PASSWORD"
echo "hostname: $HOSTNAME"
echo "time day: $TIME_DAY"

#============================================#
#          客户端相关密钥          #
#============================================#

# client keystore
keytool -genkeypair -alias $CLIENT_ALIAS -keyalg RSA -validity $TIME_DAY -storetype pkcs12 -keystore "$CLIENT_ALIAS.keystore" -storepass $PASSWORD -keypass $PASSWORD -dname "CN=$HOST OU=Alphalion O=dev L=GZ S=GD C=CN"

# client cer
keytool -exportcert -alias $CLIENT_ALIAS -storetype pkcs12 -keystore "$CLIENT_ALIAS.keystore" -file "$CLIENT_ALIAS.cer" -storepass $PASSWORD


# 这个命令会将客户端的证书导入到服务端的信任库中,以便服务端能够在 SSL/TLS 握手期间验证客户端证书的有效性。
keytool -importcert -alias $CLIENT_ALIAS -file "$CLIENT_ALIAS.cer" -keystore "$SERVICE_ALIAS.truststore" -storepass $PASSWORD -noprompt


#============================================#
#          服务端相关密钥          #
#============================================#

# server keystore(跟第一步格式是一样的)	
keytool -genkeypair -alias $SERVICE_ALIAS -keyalg RSA -validity $TIME_DAY -storetype pkcs12 -keystore "$SERVICE_ALIAS.keystore" -storepass $PASSWORD -keypass $PASSWORD -dname "CN=$HOST OU=Alphalion O=dev L=GZ S=GD C=CN"

# server cer (跟第二步格式一样)
keytool -exportcert -alias $SERVICE_ALIAS -storetype pkcs12 -keystore "$SERVICE_ALIAS.keystore" -file "$SERVICE_ALIAS.cer" -storepass $PASSWORD

# 这个命令会将服务端的证书导入到客户端的信任库中,以便客户端能够在 SSL/TLS 握手期间验证服务端证书的有效性。
keytool -importcert -alias $SERVICE_ALIAS -file $SERVICE_ALIAS.cer -keystore "$CLIENT_ALIAS.truststore" -storepass $PASSWORD -noprompt


#============================================#
#                    移动清理                 #
#============================================#
# 转移目录。服务端的密钥保存在server目录下,客户端的密钥保存在client目录下
mkdir -p visualvm/client visualvm/server
cp $CLIENT_ALIAS.cer $CLIENT_ALIAS.keystore $CLIENT_ALIAS.truststore visualvm/client
cp $SERVICE_ALIAS.cer $SERVICE_ALIAS.keystore $SERVICE_ALIAS.truststore visualvm/server

# 删除源文件
rm {$CLIENT_ALIAS,$SERVICE_ALIAS}.cer {$CLIENT_ALIAS,$SERVICE_ALIAS}.keystore {$CLIENT_ALIAS,$SERVICE_ALIAS}.truststore

Tip: 秘钥文件制作是依赖上一步操作的,制作 时要按照顺序执行
指令会生成6个文件

  • 客户端秘钥放到了visualvm/client目录,用来认证访问服务端的。
  • 服务端秘钥放到了visualvm/server目录,用来加密认证的

执行脚本

3. 服务器端运行jar包时,开启ssl连接:

ssl连接指定 visualvm/server目录下的秘钥文件,用来加密认证

jar包启动完整参数:

如果需要在服务器端启动时查看具体的证书验证成功失败与否信息,可以加入"-Djavax.net.debug=all",意思是打印JVM所有详细日志

java -jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1232  -Dcom.sun.management.jmxremote.rmi.port=1233 -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.keyStore=/mydata/xxl-job/visualvm/server/visualvm-server.keystore  -Djavax.net.ssl.keyStorePassword=study@1024  -Djavax.net.ssl.trustStore=/mydata/xxl-job/visualvm/server/visualvm-server.truststore -Djavax.net.ssl.trustStorePassword=study@1024   xxl-job-admin-2.4.0.jar

参数说明 :

java -jar -Dcom.sun.management.jmxremote \ 
-Dcom.sun.management.jmxremote.port=1232 \
-Dcom.sun.management.jmxremote.rmi.port=1233 \
-Djava.rmi.server.hostname=IP \
-Dcom.sun.management.jmxremote.authenticate=false \
# 开启远程ssl认证
-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.keyStore=/mydata/xxl-job/visualvm/server/visualvm-server.keystore \
-Djavax.net.ssl.keyStorePassword=study@1024 \
-Djavax.net.ssl.trustStore=/mydata/xxl-job/visualvm/server/visualvm-server.truststore 
-Djavax.net.ssl.trustStorePassword=study@1024  \
xxl-job-admin.jar

4. 客户端远程SSL连接

  1. 拷贝 visualvm/client目录到本地,用来认证访问服务端的。
  2. %JAVA_HOME%/bin 目录下,调出 cmd窗口,输入如下命令:

一般都有配置jdk的环境变量。可以直接 ctrl + R ,输入cmd调出窗口。

输入完命令后,会自动打开 jvisualvm 程序

# -J-D 指定 JVM的运行参数, 开启ssl连接,指定ssl秘钥和秘钥。如果ssl证书没有问题,就会自动连上远程服务器JVM,如果校验失败,相对于执行普通的"jvisualvm"命令,不会有任何错误提示。具体的证书校验失败想打印的话,需要在服务器端启动时加入"-Djavax.net.debug=all"打印JVM所有详细日志

jvisualvm -J-Djavax.net.ssl.keyStore="C:/Users/HZL/yk证书/visualvm/client/visualvm.keystore" -J-Djavax.net.ssl.keyStorePassword="study@1024" -J-Djavax.net.ssl.trustStore="C:/Users/HZL/yk证书/visualvm/client/visualvm.truststore" -J-Djavax.net.ssl.trustStorePassword="study@1024"

首次加载 jvisualvm 不会自动ssl连接远程JVM,还需要手动添加。

  1. 选择 “文件-添加远程主机”

远程主机

  1. 选择 “添加JMX连接”

添加JMX连接

如果证书 ssl 秘钥和密码完全正确,则会自动连接上远程JVM

成功

转载

[VisualVM工具的使用] : https://blog.csdn.net/TheLongir/article/details/124629717

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/591177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于深度学习的高精度汽车自行车检测识别系统(PyTorch+Pyside6+模型)

摘要:基于深度学习的高精度汽车自行车检测识别系统可用于日常生活中检测与定位汽车自行车目标,利用深度学习算法可实现图片、视频、摄像头等方式的汽车自行车目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目…

基于深度学习的高精度野生动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度野生动物检测(水牛、犀牛、斑马和大象)识别系统可用于日常生活中或野外来检测与定位野生动物目标,利用深度学习算法可实现图片、视频、摄像头等方式的野生动物目标检测识别,另外支持结果可视…

Flutter问题记录 - TextField组件多行提示文本显示不全

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 梳理Flutter项目的过程中发现还有一些遗留的TODO没处理,其中有一个和TextField组件相关。 开发环境 Flutter: 3.10.1Dart: 3.0.1 问题描述 TextField组件设置maxLines: null不限制行数,同时…

【文章学习系列之模型】SCALEFORMER

本章内容 文章概况模型结构主要方法多尺度框架跨尺度标准化模型输入编码损失函数 实验结果消融实验跨尺度标准化自适应损失函数 总结 文章概况 《SCALEFORMER: ITERATIVE MULTI-SCALE REFINING TRANSFORMERS FOR TIME SERIES FORECASTING》是2023年发表于ICLR上的一篇论文。作…

硬件工程师-BUCK开关电源设计

一、电感的伏安特性 电感线圈通电之后,会产生磁场,磁场是有一定极性的,而且磁场分布,是一个封闭的回路。在线圈的内部磁力线是比较密集的,磁场的强度是比较强的,外面空气中的的这个磁力线是比较稀疏的&…

【Unity3D】调整屏幕亮度、饱和度、对比度

1 屏幕后处理流程 调整屏幕亮度、饱和度、对比度,需要使用到屏幕后处理技术。因此,本文将先介绍屏幕后处理流程,再介绍调整屏幕亮度、饱和度、对比度的实现。 屏幕后处理即:渲染完所有对象后,得到一张屏幕图像&#xf…

Centos6.5环境Nginx 1.16.1升级到1.24.0版本

一、背景 2023年4月11日,官方发布了Nginx最新稳定版,版本号为 1.24.0。该版本是基于1.23.x(1.23.0 - 1.23.4)开发版的Bug修复,以及一些新特性的加入,而形成的稳定版。安全部门扫描后,发现现场不…

车载ECU休眠唤醒-TJA1145

前言 首先,请教大家几个小小问题,你清楚: 什么是TJA1145吗?你知道休眠唤醒控制基本逻辑是怎么样的吗?TJA1145又是如何控制ECU进行休眠唤醒的呢?使用TJA1145时有哪些注意事项呢? 今天&#xff…

chatgpt赋能python:Python中如何输入中文——从安装到常见问题解决

Python中如何输入中文——从安装到常见问题解决 Python是一门广泛使用的编程语言,其优秀的开源性、易用性、灵活性以及庞大的生态圈也令越来越多的人选择Python。但是对于初学者来说,如何正确输入中文常常成为一个问题。本篇文章从安装、常见问题解决、…

LeetCode 560 和为 K 的子数组

LeetCode 560 和为 K 的子数组 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/subarray-sum-equals-k/description 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给你一个整数数组 …

ChatGPT的4个不为人知却非常实用的小功能

今天重点介绍四个ChatGPT很实用的小功能。 一、停止生成 如果在ChatGPT输出内容的过程中,我们发现结果不是自己想要的,可以直接点击“Stop generating”按钮,这样它就会立即停止输出。 二、复制功能 在ChatGPT返回对话的右侧,有三…

在vue中集成高德地图amap-jsapi-loader

前往高德地图开发平台高德开放平台 | 高德地图API 一:申请高德key 去高德官网去创建一个属于自己的地图应用 (得到key和秘钥) 。 首先,我们要注册一个开发者账号,根据实际情况填写,身份写个人:…

制作嵌入式busybox rootfs系统

1、busybox下载 BusyBox 此篇使用版本BusyBox 1.31.1 (stable) 2、设置交叉编译环境变量 source environment-setup-aarch64-poky-linux或者其他架构的编译链工具 3、busybox编译设置 cd busybox-1.31.1 修改根目录Makefile中的CROSS_COMPILE和ARCH参数 比如ARCH ? ar…

Flask-RESTful的使用

Flask-RESTful的使用 Flask-RESTful基本使用安装定义资源Resources创建API实例添加资源到API运行Flask应用 请求处理请求解析参数校验 响应处理数据序列化定制返回格式 其他功能蓝图装饰器集合路由命名规范路由名称 Flask-RESTful Flask-RESTful是一个用于构建RESTful API的扩展…

中台分类

大家好,我是易安,之前我们谈到过中台的概念,以及如何落地中台。今天我就带你一起看一看,行业常见的中台分类。 业务中台与数据中台 业务中台 业务这个词,其实是有些宽泛的,我听到很多人口中说的业务都不是…

RK3588平台开发系列讲解(驱动基础篇)设备树常用 of 函数

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、查找节点的 of 函数二、获取属性值的 of 函数三、实验示例3.1、查找的节点代码3.2、获取属性内容代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 设备树描述了设备的详细信息,这些信息包括数字类型的…

Web安全神器-Burpsuite社区版/专业版下载、安装及使用教程

一、Burpsuite下载 Burp Suite是进行Web应用安全测试的一个集成平台,无缝融合各种安全工具并提供全面的接口适配,支持完整的Web应用测试流程,从最初的映射和应用程序的攻击面分析到发现和利用安全漏洞等领域均适用,同时还可以做抓…

TYAN 于Computex2023 展示支持第四代英特尔至强可扩展处理器的新款服务器

【台北讯2023年5月30日】隶属神达集团,神雲科技旗下服务器通路领导品牌TYAN(泰安),于2023 台北国际计算机展(Computex 2023)5月30日至6月2日展览期间,在台北世贸南港展览1馆4楼 M0701a摊位展示最…

pyest+appium实现APP自动化测试

目录 01、appium环境搭建 2、搭建pythonpytestappium环境 3、安装pycharm搭建项目编写脚本 4、执行测试 绵薄之力 01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs? 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#x…

设计模式之~工厂系列

目录 简单工厂模式 工厂方法模式 简单工厂 VS 工厂方法 抽象工厂模式: 拓展: 利用简单工厂模式优化抽象工厂 利用反射抽象工厂 进行优化 反射配置文件抽象工厂进行优化 简单工厂模式 优点:简单工厂模式的最大优点在于工厂类包含…