烂笔头笔记:为JDK安装Charles证书,让你的请求能够像在浏览器中那样被抓包

为什么要为JDK安装Charles证书

众所周知,https就是为了防止中间过程被拦截从而导致数据泄密的。若强行加入Charles代理,数据被解密后再被其重新加密,数据已经被“破坏”,客户端从而拒绝建立连接或解析内容。

发起请求并加密
拆包解密再加密
加密
拆包解密再加密
浏览器/移动设备
Charles代理
接口服务端

以往想要在浏览器或者移动设备环境中抓取到调用了哪些https接口,需要向系统或者移动设备中安装Charles根证书,并添加信任。具体操作方式为:

安装
信任区
安装
信任
网络库
中间根证书
浏览器
系统证书管理
移动设备
证书信任
APP

但是JDK或者JVM有点特殊,它有它自己的证书管理体系(keystore),按照以往的方式安装并信任Charles根证书是不起作用的。

保存Charles根证书

在菜单Help一栏中找到SSL Proxying项目,选择“Save Charles Root Certificate”,如下图所示:
保存Charles根证书

找一个目录,输入文件名,将其保存。这里注意选择文件类型为:Base 64 encoded certificate(.pem)格式的:
注意选择文件类型

将Charles根证书添加至JDK(JVM)的证书信任区(keystore)

打开命令终端(Linux/macOS)或者命令提示符(Windows)。将当前目录切换至JAVA_HOME。
注意:如果你的系统中有多个版本的JDK(JVM),或者重新安装了JDK(JVM),则需要重复本步骤
然后进入相对的这个目录(Linux/macOS):

jre/lib/security

或者(Windows)

jre\lib\security

执行如下命令(以Windows环境为例,可能需要管理员权限):

keytool -import -alias charles -keystore cacerts -file d://docs/cert//charles_root_certificate.pem

JDK(JVM)默认的keystore是一个名为“cacerts”的文件。命令中给新导入的根证书取了一个别名,叫做:“charles”。最后一个参数为上一步保存的Charles根证书完整文件名

执行过程中会提示用户输入“输入密钥库口令”,默认为空
执行后会读取Charles根证书的基本信息。大概内容如下:

所有者: C=NZ, ST=Auckland, L=Auckland, O=XK72 Ltd, OU=https://charlesproxy.com/ssl, CN="Charles Proxy CA (31 May 2024, MYPCNAME)"
发布者: C=NZ, ST=Auckland, L=Auckland, O=XK72 Ltd, OU=https://charlesproxy.com/ssl, CN="Charles Proxy CA (31 May 2024, MYPCNAME)"
序列号: 18fcd412aae
生效时间: Thu May 30 14:05:51 CST 2024, 失效时间: Fri May 30 14:05:51 CST 2025

随后会询问用户:“是否信任此证书? [否]: ”,此处输入:Y
当看到“证书已添加到密钥库中”这样的提示时,说明已经添加成功。

验证根证书

根证书导入完毕,以后如何验证是否添加了该证书呢?仍然可以使用keytool工具进行读取。

跳转至上一步中介绍到的目录,使用如下命令(Linux/macOS):

keytool -list -keystore cacerts | grep charles

或者(Windows)

keytool -list -keystore cacerts | findstr charles

工具提示用户输入keystore的密码,默认为空。

若看到类似如下内容即说明已经安装:

charles, 2024-6-18, trustedCertEntry,

经验分享,在IDE中如何结合Charles调试https接口调用

在系统对接过程中,往往会出现一些非常低级的错误。例如,对方要求POST方式以表单形式提交数据,结果以POST JSON body方式提交了。那么如何能够快速验证自己写的代码是否正确呢?

打开charles后(假设本地IP:192.168.100.1,代理端口为:8888,并且启用了SSL代理),回到IDE,在待调试项目的启动入口处修改JVM选项,增加如下JVM参数:

-Dhttp.proxyHost=192.168.100.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=192.168.100.1 -Dhttps.proxyPort=8888

注意:只设置http.proxyHost和http.proxyPort是无法抓取到https请求的
这样当程序调用了外部https协议的接口时,请求就会经过Charles代理,在代理抓取到的请求记录中,即可看到自己的请求是否符合要求。

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

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

相关文章

代码随想录算法训练营第42天(py)| 动态规划 |1049. 最后一块石头的重量 II、494. 目标和、474.一和零

1049. 最后一块石头的重量 II 力扣链接 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的…

【Linux】—Apache Hive 安装部署

文章目录 前言认识Metadata认识Metastoremetastore三种配置方式 一、安装前准备二、下载hive-3.1.2安装包三、下载完成后&#xff0c;通过xftp6上传到Linux服务器上四、解压Hive安装包五、配置Hive六、内嵌模型安装—Hive元数据配置到Derby七、本地模式安装—Hive元数据配置到M…

高等数学笔记(二):极限

一、数列极限的定义 以下符号表示 “对于任意给定的” 以下符号表示 “存在” 以下符号表示 “如果什么&#xff08;箭头左&#xff09;&#xff0c;则什么&#xff08;箭头右&#xff09;” 二、收敛数列的性质 2.1 唯一性 2.2 有界性 2.3 保号性 2.4 子数列收敛性 三、函数…

文字转语音在线怎么转?总结了三种快速转换

文字转语音在线怎么转&#xff1f;在数字化信息爆炸的时代&#xff0c;文字转语音的操作也越来越多。无论是为了制作视频配音、播客节目&#xff0c;还是为了方便视力障碍者阅读&#xff0c;文字转语音技术都提供了极大的便利。因此&#xff0c;本文将总结三种文字转语音的在线…

2024年【高压电工】模拟考试题及高压电工考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年高压电工模拟考试题为正在备考高压电工操作证的学员准备的理论考试专题&#xff0c;每个月更新的高压电工考试试题祝您顺利通过高压电工考试。 1、【单选题】下列()安全用具是在电气操作中使用的基本安全用具。…

华为安全Security认证,你了解多少?

华为安全Security 认证包含HCIA-Security, HCIP-Security,HCIE-Security。HCIA-Security 掌握中小型网络信息安全基础知识与相关技术&#xff08;华为防火墙技术、加解密技术、PKI 证书体系等&#xff09;&#xff0c;具备搭建小型企业信息安全网络的能力&#xff0c;实现中小企…

文案提取小帮手如何提取文案或视频转文字呢?

文案提取小帮手通常是指专门用于从视频、音频中提取文本内容的工具。以下是一些常见的方法来提取文案或将视频转换为文字&#xff1a; 方法一&#xff1a;必应搜索引擎 打开必应输入【视频下载plus助手工具】 然后点击进入选择视频转文案按钮使用手机扫码即可体验视频转文字功…

threejs教程:绘制3D地图(广东省区划图)

一、效果展示&#xff1a; 二、开发准备 Three.js中文文档&#xff1a;Three.js中文网 Three.js文本渲染插件&#xff1a;Troika 3D Text - Troika JS 行政区划边界数据查询&#xff08;阿里云数据可视化平台&#xff09;&#xff1a;DataV.GeoAtlas地理小工具系列 1. 在项目…

DDL与DML语句

1、DDL语句 CREATE table user(user_id INT AUTO_INCREMENT PRIMARY KEY,userName VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL,email VARCHAR(100) UNIQUE,phone VARCHAR(20) UNIQUE,create_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE user_w…

【Ubuntu开发入门之“orangepi H3 linux开发③kernel移植调试“】

Ubuntu开发入门之"orangepi H3 linux开发③kernel移植调试 问题描述解决方法获取源码内核适配和编译制作TF卡分区,以备存放各个分区和文件根文件系统拷贝郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Allwinner H3 O…

Nginx和Tomcat负载均衡、动静分离集群1

一、Nginx负载均衡 1.负载均衡概念 服务端接受来自客户端的请求中&#xff0c;既有动态资源也有动态资源&#xff0c;静态资源由 Nginx 提供服务&#xff0c;动态资源 Nginx 转发至后端

【机器学习300问】123、什么是GRU?GRU网络的基本结构是怎样的?

在之前的文章中&#xff0c;我们谈到了标准RNN所面临的诸多困境&#xff0c;你也可以理解为RNN的缺点。其中最让人苦恼的就是梯度消失问题&#xff0c;正是由于梯度消失问题的存在&#xff0c;导致RNN无法获得上下文的长期依赖信息。那么就没有办法解决了吗&#xff1f;非也&am…

Linux实现: 客户端(cli01)通过TCP(或UDP)连接到聊天服务器(serv)进行聊天?(伪代码版本)

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Flutter 小技巧之面试题里有意思的异步问题

很久没更新小技巧系列了&#xff0c;本次简单介绍一下 Flutter 面试里我认为比较有意思的异步基础知识点。 首先我们简单看一段代码&#xff0c;如下代码所示&#xff0c;是一个循环定时器任务&#xff0c;这段代码里&#xff1a; testFunc 循环每 1 秒执行一次 asyncWorkasy…

C++ 60 之 虚析构和纯虚析构

#include <iostream> #include <string> #include <cstring> using namespace std;class Animal13{ public:Animal13(){cout << "Animal的默认构造函数" << endl;}virtual void speak(){cout << "动物叫" << en…

?? 与 || 在 JavaScript 中的微妙差别

起初&#xff0c;你可能会认为你可以随意替换任何你喜欢的人&#xff0c;对吗&#xff1f; 错误。他们并非你所想的那样。 我们必须一劳永逸地学习这个区别&#xff0c;以避免日后出现痛苦的错误。 这个差别是什么&#xff1f; 这是他们对待真值和假值的令人难以置信的对比。这…

C++ 61 之 函数模版

#include <iostream> #include <string> using namespace std;void swapInt(int &a,int &b){int temp a;a b;b temp; }void swapDou(double& a, double& b){double temp a;a b;b temp; }// T代表通用数据类型&#xff0c;紧接着后面的代码&a…

科技前沿:Web3技术驱动下的物联网创新

随着Web3技术的迅猛发展&#xff0c;物联网&#xff08;IoT&#xff09;作为连接和互操作性的关键&#xff0c;正迎来一场前所未有的革命。本文将深入探讨Web3技术如何驱动物联网的创新&#xff0c;以及这种创新如何重新定义我们对智能设备、数据安全和网络架构的理解。 1. Web…

PR软件视频抠图换背景

1 新建项目 2 新建序列 在项目的右下角有个图标&#xff0c;新建 序列 序列是视频的制作尺寸&#xff0c;根据自己的需要选择 3 新建颜色遮罩 在项目的右下角--新建颜色遮罩--选择黑色--确定 4 导入视频 把要导入视频的文件夹打开&#xff0c;把视频拖到 项目 里 把黑色遮罩拖…

56.SAP MII开发的一个系统响应错误 Error code: ICMETIMEOUT

问题 一个SAP MII开发的项目&#xff0c;最近新增了一个功能&#xff0c;查询数据源量比较大&#xff0c;逻辑有点复杂&#xff0c;大约7-8分钟。发布到生产系统后&#xff0c;发生响应错误&#xff0c;返回 Error code: ICMETIMEOUT <!-- Error code: ICMETIMEOUT -->\r…