一.charles的工作原理
在关于HTTPS,你需要知道的全部中,分析了HTTPS的安全通信过程,知道了HTTPS可以有效防止中间人攻击。但用过抓包工具的人都知道,比如Charles,Fiddler是可以抓取HTTPS请求并解密的,它们是如何做到的呢?
首先来看Charles官网对HTTPS代理的描述:
Charles can be used as a man-in-the-middle HTTPS proxy, enabling you to view in plain text the communication between web browser and SSL web server.`
Charles does this by becoming a man-in-the-middle. Instead of your browser seeing the server’s certificate, Charles dynamically generates a certificate for the server and signs it with its own root certificate (the Charles CA Certificate). Charles receives the server’s certificate, while your browser receives Charles’s certificate. Therefore you will see a security warning, indicating that the root authority is not trusted. If you add the Charles CA Certificate to your trusted certificates you will no longer see any warnings – see below for how to do this.
Charles作为一个“中间人代理”,当浏览器和服务器通信时,Charles接收服务器的证书,但动态生成一张证书发送给浏览器,也就是说Charles作为中间代理在浏览器和服务器之间通信,所以通信的数据可以被Charles拦截并解密。由于Charles更改了证书,浏览器校验不通过会给出安全警告,必须安装Charles的证书后才能进行正常访问。
下面来看具体的流程:
1.客户端向服务器发起HTTPS请求
2.Charles拦截客户端的请求,伪装成客户端向服务器进行请求
3.服务器向“客户端”(实际上是Charles)返回服务器的CA证书
4.Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
5.客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
6.Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
7.服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
8.Charles拦截服务器的响应,替换成自己的证书后发送给客户端
9.至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。
HTTPS抓包的原理还是挺简单的,简单来说,就是Charles作为“中间人代理”,拿到了 服务器证书公钥 和 HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,否则客户端就会“报警”并中止连接。这样看来,HTTPS还是很安全的。
转自:https://www.jianshu.com/p/405f9d76f8c4
二.charles版本的安装
请参考官方网站:https://www.charlesproxy.com/download/previous-release/
其中v3.12.3可以抓取客户端安装完证书之后可以抓取https的请求,另外charle破解码可以网上百度搜索
最新版本v4.5.1暂时无法安装证书
三.pc端以及移动端证书的安装
1.pc端安装正式的遇到的问题:使用Charles代理工具导致电脑无法正常访问网站(您的连接不是私密连接)
解决方案:
很多开发者都需要使用代理工具来调试接口,查看数据等等,但是有时候发现打开代理工具之后,代理工具同时也拦截了电脑的所有网络请求,导致电脑访问网站时提示(您的连接不是私密连接)。。。
造成这种问题的原因就是charles等代理工具也拦截了电脑网页的请求,但是使用的是charles代理工具的证书,导致浏览器无法验证此网页的证书,进而导致了报错,那么该如何解决呢?我们只需要将charles的证书添加到电脑的信任证书中即可。
进入Charles的Help中,选择SSL Proxying,然后点击Install Charles Root Certificate。
此时我们的Charles证书是不被系统信任的,所以访问网站每回都会报证书问题,然后我们点击安装证书。
可以选择证书的安装位置,我选择的是本地计算机,所有用户都可以用,或者为了安全,也可以选择只给当前用户安装,那么别的windows用户就没有被安装此证书;
然后为证书选择存储位置,这里必须手动选择存储位置,否则自动选择出来的证书位置仍然是不被信任的。
然后点击浏览,我们手动指定证书的存储位置为“受信任的根证书颁发机构”。
然后点击确定,完成,此时再次进入安装证书的步骤,我们就发现Charles证书已经被系统信任。
此时,开着Charles再次访问网站,是不是已经可以正常访问了?如果还是报证书问题的话,试着重启一下电脑,重启之后就可以正常访
————————————————
版权声明:本文为CSDN博主「mengzhiyuan93」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mengzhiyuan93/article/details/74699032
2.移动端安装证书
Andriod一些版本安装完证书之后,抓取的https请求还是乱码展示
参考文章:https://jingyan.baidu.com/article/b2c186c80b1cb3c46ef6ffcc.html
oppo R15安装charels证书