.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font-size: 14.0px; font-family: "Helvetica Neue", "PingFang SC"; color: #454545; min-height: 14.0px }

Q:HTTP协议是明文传输,在凶险的网络世界里裸奔,实在太不安全了!

A:是的,为了解决这个问题,人们搞了个HTTPS协议。

Q:先问一句,HTTPS协议的报文格式和HTTP有什么不同吗?

A:HTTPS的意思是“HTTP over SSL”,加解密过程放在应用层与传输层之间,对于使用SSL的应用层程序来说是无感知的,浏览器收发的依然是标准的HTTP报文

Q:好的,那SSL协议如何完成加密通信?

A:SSL协议使用RSA非对称加密算法,一个该算法的使用者会生成2个密钥,分别是私钥公钥,私钥加密的内容只能用配对的公钥解密,反之亦然;加密算法很强无法被破解,且无法通过一个密钥算出另一个密钥。服务器S在收到客户端C发来的TCP握手后,把自己的公钥发给C;随后C生成自己的公钥和私钥,并把自己的公钥用S的公钥加密后发送给S。这样一来,S和C都互相有对方的公钥啦。

Q:哦,这样一来,S给C发的信息用C的公钥加密,只有C的私钥能解开;C给S发的信息用S的公钥加密,也只有S的私钥能解开。其他人就算拿到了信息也查看不了啦!太棒了!

A:是的。

Q:且慢,有了SSL,只能确保通信内容是保密的,但要是C的DNS服务被劫持了,C与一个假冒S的钓鱼网站建立了SSL连接,那么就算通信加了密,敏感信息还是会落到歹人手里。

A:你说的很对,因此人们又发明了“证书”体系,可以向C证明“与你建立连接的那头确实是S”。

Q:哦?愿闻其详。

A:首先得有一个类似于“公证处”的第三方机构CA(Certification Authority)。S为了防范冒牌货,可以拿着自己的公钥来CA申请认证。CA在验明正身后,会给S一个全局唯一的身份标识,然后生成一个证书(certificate),证书里包含了S的公钥和身份标识。最后,CA用自己的私钥给这个证书加一个数字签名,以证明这个证书确实是CA颁发的。

Q:这样一来,S就拿到了一个CA颁发的证书,证书里有CA的签名,以及S的身份和公钥。

A:是的,现在我们可以改进之前的通信流程。首先C得持有CA的公钥,可能是系统预置,或者用户手动安装。当S收到C的TCP握手后,把自己的证书发给C,C拿到证书后,先用CA的公钥验证签名真伪,确认该证书确实是CA颁发;然后,从证书里获取身份信息,与对方发来的身份信息相比较,确认该证书里的身份确实就是S的身份。身份验证无误后,就可以确认TCP连接的另一头确实是S本尊,可以放心地开始SSL通信啦!

Q:我想想……证书可能被伪造吗?

A:不可能,除非你有CA的私钥。

Q:听起来是极好的。可要是CA把证书颁给了钓鱼网站,那就没得玩了……

A:是的,CA是整个信任体系的根,在信任CA时,一定要慎重!系统里预置了一些世界上知名的CA根证书(含有CA公钥的证书),用户也可以自己添加。

Q:有意思,我想试着解释一下,为了能让Charles代理手机的https请求,我做了什么操作。首先,Charles在开发机上起了个代理服务器Proxy,Proxy为了能与手机建立https连接,需要有一个证书。一个开发用的小破代理显然没资格也没必要去申请什么知名CA的认证,于是Charles自己搞了一个野生的CA,然后用这个CA给Proxy颁发了一个证书。然而手机并不信任这个名不见经传的野生CA,见到Proxy发来的、由野生CA颁发的证书,自然也不会信任,从而拒绝建立TCP连接。为了解决信任问题,就需要我连着Proxy去chls.pro/ssl这个地址下载这个野生CA的根证书,并且在手机里信任它。这一步完成以后,手机在与Proxy建立TCP连接时,Proxy发来的证书就能够被信任并验证,从而顺利建立通信~

A:很好~顺便说一句,历史上还真有些名气很大的CA被黑客攻破服务器拿到私钥,这些CA也因此变得不再可信。为此操作系统里还维持着一个“证书吊销列表”,记录这些倒霉的CA。

HTTPS、证书与使用Charles抓包的更多相关文章

  1. https 通信流程和Charles 抓包原理

    1. https 通信流程 ①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息.②服务器向客户端传送SSL 协议的版本 ...

  2. Charles抓包https

    Charles抓包https 灰灰是只小贱狗 2018.05.08 10:46 字数 762 阅读 7800评论 3喜欢 3 抓取HTTPS请求包,对数据进行排查检验 1.安装Charles 2.电脑 ...

  3. charles 抓包 https 证书

    1. 概述 环境:这里是windows8 和 android (参考了ios环境的博客) 手机app点击发出http及https的请求,之前抓包都有请求的相关内容展示,这次没有,原来之前的一直抓的是h ...

  4. Charles抓包工具永久破解+https抓包需要安装安全证书+防止请求乱码

    1.charles4.5.6版本安装+永久破解 链接:https://pan.baidu.com/s/1Z49AE6TG2IXUY-7qoyGU4g 提取码:3i97 安装好charles之后,把下载 ...

  5. charles抓包https设置

    写在前面 https抓包的实现 (一)首先,电脑得装个证书 (二)然后,移动设备上安装证书 (三)最后,Charles添加SSL Proxying 写在前面 开发时,面对各种接口数据,绝大多数时间都会 ...

  6. 接口测试之——Charles抓包及常见问题解决(转载自https://www.jianshu.com/p/831c0114179f)

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用,安装Charl ...

  7. Charles抓包http和https

    本来不打算写的,度娘一搜一大堆各种教程,实在是网上的各种设置的各种坑都有,我还是站在巨人的肩膀上汇总一下吧 首先http的就不用说了,各种教程版本区别不大,也没什么坑,主要是https: 第一步先下载 ...

  8. 十分钟学会Charles抓包(iOS的http/https请求)

    ### 原文地址,感谢作者 : http://www.jianshu.com/p/5539599c7a25 Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Ch ...

  9. 43.Charles抓包(iOS的http/https请求)

    Charles安装 HTTP抓包 HTTPS抓包     1. Charles安装 官网下载安装Charles: https://www.charlesproxy.com/download/ 2. H ...

随机推荐

  1. HTML,CSS学习笔记

    <p>元素,代表是一个段落,单独另起一行</p> <h1>的意思就是主标题</h1> <h1><h2><h3>... ...

  2. CentOS6.9-zabbix3.2启动失败原因及页面没有mysql选择项

     环境内核信息: [root@zabbix- ~]# uname -a Linux lodboyedu- -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_64 ...

  3. Progressive Web Apps入门

      PC和Mobile开发技术演进 PC方向,从客户端到富客户端,到现在广泛使用的Web.   移动方向,目前主要还是原生应用和Mobile Web,PWA相关技术是未来发展方向.   PWA的概念 ...

  4. http请求HttpClient短信接口

    项目中安全设置找回密码的功能,需要通过发送短信验证绑定手机,通过绑定的手机号验证并重新设置密码. 因为项目是通过maven管理的,所以需要在pom.xml文件中引入jar包, maven引入的jar包 ...

  5. Codeforces Round #271 (Div. 2) F题 Ant colony(线段树)

    题目地址:http://codeforces.com/contest/474/problem/F 由题意可知,最后能够留下来的一定是区间最小gcd. 那就转化成了该区间内与区间最小gcd数相等的个数. ...

  6. 根据实践经验,讲述些学习Java web能少走的弯路,内容摘自java web轻量级开发面试教程

    在和不少比较上进的初级程序员打交道的过程中,我们总结出了一些能帮到合格程序员尽快进阶的经验,从总体上来讲,多学.多实践不吃亏.本文来是从 java web轻量级开发面试教程从摘录的. 1  哪些知识点 ...

  7. 十四、Spring Boot 日志记录 SLF4J

    在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了. 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增 ...

  8. anaconda不能安装python的包问题

    在点了n次,重启应用多次之后,安装包(apply)之后还是没有反应,依然心平气和的我突然想到用管理员模式打开,结果就可以愉快的装包了,估计创建新的环境也是要管理员打开的.

  9. 写给自己的web总结——关于html的知识总结

    相信每个前端工程师初识前端之时,最先接触的都是html吧! html的全称是hyperText markup language, 超文本标记语言,在网页中所有的文字,图片,架构等都是由html来编写的 ...

  10. C# 杂活

    1 下拉框 List<Model.Sys.AccountModel> AcModel = BLL.Sys.AccountBLL.Instance.GetModelList("Ro ...