1. Https概述
Https是啥?https还是http,只不过加了个s,安全了。http不安全的原因是因为在网络传输过程中都是明文信息发送,如果作为一个中间人在路由器或者在运营商节点上抓包,再通过文件解析,统统都可以将你和服务器之间发送的图片,语音,视频还原回来(最早的黑客防线上就有针对中间人抓到数据包解析的工具,不过都是N年前的事情了)。
另外https也并非完全的使用非对称加密算法,第一个原因是在于非对称算法涉及到的运算复杂,在大量验证的情况下耗cpu,另外一个原因是第一个传递的信息肯定是不加密的(这是一个鸡生蛋还是蛋生鸡的问题,加密得有秘钥,秘钥又得加密,加密秘钥的秘钥又得传过去)。
2.对称加密和非对称加密
对称加密即加密和解密都使用同一个秘钥。非对称加密就是加密和解密不使用同一个秘钥,一般对外传输的就是公钥(公共的意思嘛,谁都可以看到),私钥是我自己解密用的。你用公钥加密一个消息比如“你好”,我用私钥解密得到“你好”这两个字。公钥和私钥是不一样的,记住这个,至于怎么用不同的秘钥去加密/解密同一个内容,那是算法的事情了,我们不深究。 但是,请记住,在https的使用整个流程跑通中,并非只是用了一次非对称加密,第一次是在申请证书的时候用了,第二次是在握手的过程中用了,可以认为是两个阶段用了。
3. CA证书
CA是个什么东西?单纯的Https按照正常理解来讲,我和你通信,你给我一个公钥说你用这个公钥来加密,你有私钥解密哦。可使如果隔壁老王也来给我说他是你,让我来用他的公钥和你通信,那么我该信任谁? 这个时候就需要有一个公正机构,就类似于户籍室,这里叫CA。老王给我一个身份证说他是你,我说行,那我拿去问问CA,请问这个是你吗?CA说不是,这是你隔壁老王,那我只能心里MMP,说句滚了。
但是这里并非是这么搞的,我每次去找CA去问是不是很麻烦?每天那么多请求要检查的CA也扛不住啊。
所以你看看电脑里面有个根证书,CA机构类似于户籍室也是一层一层的,比如国家级、省级的,地市级的等等(国家级的能查找地市和省级的,你可以理解维信息都是互通的)。所以我用根证书去校验老王是不是你就可以了。
一般一个网站要搞Https的时候要去自己申请证书,这里证书就相当于身份证,就相当于生了个https的娃要上户口。
这里需要你提供的就是你的公钥和你的申请信息,比如你是哪家机构,至少你得给孩子起个名字。CA拿到你的这些信息先用一个哈希算法(比如md5,哈希算法是啥,就当是算你指纹的吧)生成一个摘要,拿这个摘要用自己的私钥加密一下,生成的就叫做签名,然后把签名+申请信息(包含公钥)打包起来就叫证书了。
到这里你就是有证的人了,那这个证别人怎么用呢?
4. Https连接是如何建立的。
由于https里面有很多的密码套件,也有很多版本,因此在建立https连接之前是要对使用的密码套件和版本进行统一的。所以这里就有了第一步:
客户端说:hi,你好,我这里会说这些语言(有这些密码套件),你看看你选哪一个?(Client Hello)
服务器说:hi,我选法语吧,我这里刚好有。(Server Hello)
服务器说:你看,这是我的证书,让我来给你服务吧。(Certificate)
服务器说:我说完了,你说吧 (Server Hello Done)
到这里就到了那个我要看看你是不是隔壁老王的阶段了,客户端会用CA的公钥解密出来当时CA给网站的东西。这里就用哈希算法生成一个摘要,再看看和证书里面的摘要是否一致就行了,如果一致那就没问题,如果不一致那就有问题。
客户端说:好了那我们开始愉快的加密吧,我先给你传下我们接下来要说话的对称秘钥吧。(Client Key Exchange) 客户端说:我把对称秘钥用你公钥加密发过去啦,你切换下呗。(Change Cipher Spec) 客户端说:我说完了。(HandShake Finished) 服务器说:好了我切换了。(Change Cipher Spec) 服务器说:我说完了。(HandShake Finished)
到这里就协商出来一个共同的秘钥了,后面一直用对称加密算法对信息进行加密解密就ok了。
5. https中间人
https的中间人就类似于中间人自己即是服务器有是客户端。
服务器角色和手机建立https通信,获得数据后再走https和真正的服务器通信。
难点在于ca证书验证,一般搞法就是替换手机端替换ca证书。
具体工程里面怎么搞呢?搞个味屁嗯Server,味屁嗯Server装个mimtproxy,手机客户端抓包的时候连上vpn后安装下mimtproxy的证书就完事了。味屁嗯Server的目的就是为了将外网转成内网,市面上的https抓包工具都是这么搞的了。




