.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. replace深入

    var b = 0; var arr = []; str = str.replace(/J/g,function(){ var args = arguments; b++; arr.push(args ...

  2. windows 怎样查看port占用情况

    開始--执行--cmd 进入命令提示符 输入netstat -ano 就可以看到全部连接的PID 之后在任务管理器中找到这个PID所相应的程序假设任务管理器中没有PID这一项,能够在任务管理器中选&q ...

  3. mongodb的NUMA问题

    问题: 在mongodb登录时日志显演示样例如以下: [loguser@32_180 ~]$ mongo -u root -p xxxxx --authenticationDatabase adm ...

  4. hdu 4869 Turn the pokers (思维)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. Memcached的安装与简单使用

    Memcached下载 如果是Win10系统,还需要单独安装telnet服务,因为Win10把它给阉掉了.(默认下一步下一步安装) 一.安装Memcached 将Memcached解压到目录,以管理员 ...

  6. 十三、 Spring Boot 启动加载数据 CommandLineRunner

    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求. 为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来 ...

  7. 设备指纹识别之User Agent 解析

    设备指纹识别之User Agent 解析User Agent 解析 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-4- ...

  8. jsp中EL表达式不起作用的问题1

    问题:在jsp页面中使用el表达式取值,取不到值,但是使用jsp中嵌套java代码可以取到值,对应代码如下: 解决: 只要在 jsp中 头文件中写上 : <%@page isELIgnored= ...

  9. 让你用sublime写出最完美的python代码--windows环境

    至少很长一段时间内,我个人用的一直是pycharm,也感觉挺好用的,也没啥大毛病 但是pycharm确实有点笨重,啥功能都有,但是有很多可能这辈子我也不会用到,并且pycharm打开的速度确实不敢恭维 ...

  10. fatal: Authentication failed for “someurl”

    一.前言 我们在公司做项目,很多时候会遇到这个问题:Git failed with a fatal error. Authentication failed for ‘ http// xxx..... ...