前提
我们换个思路,先描述一下HTTPS的整个请求过程,然后看能否进行攻破,在这个过程对其HTTPS的原理进行回顾,首先我们知道客户端先发起请求,请求CA等第三方机构颁发给公司(服务器)的证书,那我们先看看CA的证书制作过程,然后分析下对称和非对称的缺点
CA制作证书
- 服务方S向第三方机构CA提交新信息,并申请认证;
- 新信息包括
公钥
(非对称加密的公钥,用于传输对称加密的秘钥)、公司信息
(包括:组织信息、个人信息(域名)),因为这个新信息会被多次用到,所以我们用info
代替 CA 会验证S的合法性,这个不用考虑,是CA对公司域名等信息的调查等等,可以忽略
- 新信息包括
- CA将
info
用某种哈希散列算法
进行加密为摘要信息
- 提交的信息,刚才新信息已经提到了,不赘述
-
某种哈希散列算法
加密过程是不可逆,即加密完没有人可以解密
- CA用自己的私钥对
摘要信息
进行加密,即成为数字签名
【这个过程很重要,引入三方证书的关键作用,后续会展开谈】 - CA将
info
+数字签名
对称和非对称加密的优缺点
网上对这两种加密的定义和解释很多,这里不赘述,直接整理其优缺点
- 对称加密
- 优点:速度快
- 缺点:本身在传输秘钥的过程就不安全,容易被劫持
- 非对称加密
个人觉得非对称加密本身也不是安全的,有可能中间人攻击
,这个概念可以自行百度,另外本身非对称加密传输也比较慢
HTTS的通信过程
以下C代表客户端,S代表服务端
- C首先请求S证书,S返回证书文件
- C拿到证书文件就意味着拿到了
信息摘要
和info
,然后C根据上文CA用到的某种哈希散列算法
对info
进行加密生成新的信息摘要
,若这两个信息摘要
一致,则可以验证服务器信息违背篡改
- C拿到证书文件就意味着拿到了
-------------------------------------------------- 打扰一下,我要中断一下 -----------------------------------------------------
我们看看以上两个过程是否可以攻破:
- 如果中间人在第一步的时候通过代理进入了这个过程,伪装了C获取到了S返回的证书(其实不伪造直接请求S的证书,是不是也没问题呢),这个困扰了我好久,我们把中间人成为agent,按照以前的逻辑,agent可能自己伪造一对秘钥,然后给C自己的公钥,然后C给S信息时,agent再用自己的私钥解密,就能拿到C的信息😈😈😈。。同样的方法可以拿到服务器给的公钥
但是在Https机制下这完全是不可能的,因为数字证书的制作过程,有一个很重要的过程,也是引入CA的很重要的理由,就是签名,虽然agent获取到了证书,拿到了S的公钥,换成了自己的公钥,但是agent无法生成和以前数字证书,因为它没有CA签名的时候的私钥,所以😁😁😁,即便拿到证书也没用,C在进行信息摘要对比的时候,就能发现不一致了
--------------------------------------------------不打扰了,继续装逼去了-----------------------------------------------------
- 对第二步进行一下补充,C由于本身内置了受信任的CA的根证书,根证书中包含CA公钥,这样就能解密出数字签名中的
信息摘要
,如果客户端并没有内置这些根证书,或者根证书不受信任的话,就解密失败,不能正确验证S数字证书的真实性
- 对第二步进行一下补充,C由于本身内置了受信任的CA的根证书,根证书中包含CA公钥,这样就能解密出数字签名中的
- C拿到S的公钥后,本地生成对称加密需要的秘钥,然后用S的公钥加密,在传给S,这样对称加密的公钥就被安全的进行了输送,对称加密的缺点就被弥补掉了
以上第四步,被攻击的意义不大,因为由于非对称加密,拿到了也解不开,至此当S端拿到秘钥以后,就可以愉快的加密传输数据了
网友评论