【聊聊Wifi那些事专题】已经写了两三篇,demo也放出去了,接下来会介绍的就是抓包,说到抓包不可避免的要说到https,如果想抓到https的包就要先了解https的原理。这篇文章就要对https进行简单介绍,下一篇文章会介绍具体抓包方案。
加密
对称加密
对称加密就是加密解密使用同一个秘钥,也就是一把钥匙开一把锁,用哪把钥匙锁上的,就用哪把钥匙打开。
常见的对称加密算法:DES,AES,3DES等等。
非对称加密
非对称加密是指加密和解密用不同的秘钥,一个公开的公钥,一个只有自己知道的私钥,公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。一把加锁的钥匙,一把解锁的钥匙。
常见的非对称加密算法:RSA,ECC
与HTTP的几点区别
1. https协议需要到证书颁发机构(Certificate Authority,简称CA)申请证书,一般免费证书很少,需要交费。
2. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3. http和https使用的是完全不同的连接方式,使用的端口也不一样,前者是80,后者是443。
HTTPS设计原理
为什么不使用http
想这样一个场景,客户端需要输入账号密码,将账号密码发给服务器进行登录,这些账号都是明文的,肯定不行,那只要抓包就能看到内容对吧。局域网内很容易窃取账号密码。
那好吧,只能加密了,假设加密规则为A,服务器解密规则也为A,这就是上面提到的对称加密,这样总没问题了吧。这时会遇到两种情况:
1. 客户端是某个app,服务器的接口只有该app能访问,这样加密规则只有这个app公司内部的人能知道,这个没有关系
2. 客户端是浏览器,浏览器要求能够打开各个服务器的网页,那么加密规则就要求所有的浏览器都得知道,而且需要知道所有的网站的加密规则,如果这样的话,加密规则就不再是秘密了,既然不是秘密,那也就没意义了。
试试非对称加密
根据刚才讲过的非对称加密原则,客户端只要有公钥,就可以对内容加密,而且每个客户端的公钥都是不一样的,而且公钥还不能解密,解密的私钥只有服务器才有。这样看似安全了。
但是新的问题产生了,客户端怎么拿到公钥。
也有两种形式:
1. 服务端下发给客户端,但是中间可能被拦截,然后掉包。
2. 还可以直接配置在客户端,但是一个客户端配置所有网站的公钥,似乎不大现实。
那么看来只能用第一种,而且为了防止掉包,我们可以去做个验证。就好比,你通过x宝买了一个钻石,X宝给你发的是真货,有证书的,但是钻石在运送过程中可能会被掉包,怎么办,只能我们收到钻石之后,去相关检测机构,拿着证书跟这个钻石去检测。
检测机构
看一下下面这张图,大家可能会好理解一些。
image.png
网站好比是T包,用户是客户端,公钥相当于钻石,网络就是物流公司,那么检测机构是什么呢?如果有了这个检测机构不就可以对公钥进行验证了。
假设有一个机构,可以对所有的网站证书进行规则的统一,客户端也能对证书的规则进行校验了。
这个机构就是数字证书签发机构(CA),好像久仰大名了,对就是你经常听说的那个机构。那么上面提到的证书就是HTTPS中数字证书,证书编号就是数字签名。
每一个正规的网站都要去这个机构申请证书,这个机构来保证规则,这里需要再假设一下这个规则是G,待会需要用到这个G。
客户端怎么去这个机构验证从网站拿到的证书呢?
请求这个机构的接口,显然链路太长,不合理,那么只能是放在客户端了。
这里有人可能会问,世界上那么多机器(手机,电脑),检测机构怎么放进去呢。
其实,不管什么机器,但凡操作系统或者浏览器,都会维护一个第三方机构的列表,客户端收到服务端的证书,就去表里查,由于这个机构给服务器的都有一个规则G,那么根据本地的就可以根据这个规则G,生成对应的公钥。这个公钥可不是请求的公钥,咱们假设这个是公钥A吧,客户端接收到的证书编号是用机构的私钥加密,这样,机构只要配置公钥即可。客户端拿着本地的公钥去解密机构加密的证书编号,根据规则验证证书正确,ok,可以相信服务器给的公钥B了,然后再拿公钥B去请求即可。如下图所示:
image.png
好了这基本就是HTTP的设计历程了,接下来再讲抓HTTPS包的原理就会好理解的多。
无证书的网站访问
很多网站或者服务器是没有CA机构颁发的证书的(毕竟申请要花钱的),所以他们传给客户端的证书是不受信任的,那怎么办?
上面提到过系统会维护一个第三方机构的列表,客户端收到服务端的证书,会去表里查,那么我在这个列表中添加一个证书即可。添加完毕,收到服务器返回的证书,我也可以同样拿到公钥验证服务器的证书了。
总结
了解了上面说到的原理,接下来再来讨论如何抓包就好说多了,在这里要声明,我不是介绍抓包工具,要介绍抓包原理。
相关推荐
一起分享技术的点滴,关注公众号加入我们吧。












网友评论