对HTTPS的一点理解

2018-05-15  本文已影响28人  你weixiao的时候很美

这篇原理讲的蛮好的https原理通俗理解
还有迪哥的这篇 简单粗暴系列之HTTPS

https就是http over ssl 。大致原理如下。(还缺了一个自己画的图,以后补上)

1: 客户端-》 服务器 信息传输不安全,需要加密

2:使用对称加密方式A: 产生如下情况

客户端A--- 对称加密方式A  -----服务器
客户端B---- 对称加密方式A ----- 服务器 

所有的客户端和服务器的链接都用同一种方式加密,无异于没加密。

  1. 所以,解决方案是:
客户端A--- 对称加密方式A  -----服务器
客户端B---- 对称加密方式B----- 服务器 

客户端和服务器之间使用不同的对称加密方式。如何让客户端和服务器知道使用了什么那种对称加密方式呢。

  1. 解决方案是:
客户端A  -------我要用加密算法A--->  服务端
客户端A  <---------我知道了---------  服务端


客户端B-------我要用加密算法B---> 服务端
客户端B <-------  我知道了--------- 服务端

客户端和服务器有一个协商的过程,协商使用那种加密方式和什么秘钥。 产生的问题是协商的部分没有加密。可以被中间人拦截。

  1. 解决的方案:
    使用非对称加密方式,对协商的部分加密。
客户端(公钥)------协商内容(对称加密方式和秘钥)-----> 服务端(私钥)

这样有有一个问题 ,客服端必须有这个公钥,但是客户端如何保证该公钥的确是服务器给的公钥,如下,客户端获取的公钥可能被篡改

客户端<---- 假公钥<-----中间劫持(假公钥,假私钥)<----真公钥---服务器

中间劫持获取服务端真公钥,然后下发假公钥,服务端使用假公钥加密,中间劫持使用假私钥解密,然后将信息篡改,使用真公钥加密后给服务端。

  1. 解决方案
    如果一直加密下去也不是办法。 这时候需要一个第三方机构来处理。
客户端 (本地存储有第三方机构的公钥)<-- 使用第三方机构的私钥加密后的(我们的公钥)---服务端

服务端发送给我们的 使用第三方机构的私钥加密后的 (我们协商要用的公钥等信息)的东西称为 证书。

这样我们对 客户端和服务器之间协商要用的自己的公钥也进行了加密,使用的是第三方机构的私钥。 而第三方机构的公钥存在我们本地不用传输,保证了不会被劫持和替换 。

如果服务器给我们的证书,我们用本地的第三方公钥解密不了,说明证书有问题。

现在遇到一个问题,如果同一个第三方机构用同一个私钥加密了我们要用的公钥M,给了证书1, 也加密了中间劫持人的公约N,给了证书2.
这时,中间劫持人可以解密我们的证书1, 然后给我们一个伪造或者
篡改后的证书2,此时是同一个私钥加密获取的证书,客户端还是可以解密证书2。

  1. 解决方案是:使用数字签名来防止证书有问题

证书在发送到客户端后,客户端解密后, 对证书的 内容进行 一个签名算法(md5等) 然后与证书自带的 结果进行比对,可以保证证书没有内容没有别篡改。

 证书内容 ---签名算法MD5等--> 证书编号结果1  ==? 证书自带编号结果2

8.关于第三方机构

到这里: 证书就是TTTPS中的数字证书
证书编号就是数字签名
第三方机构就是数字证书颁发机构CA

CA的公钥是如何存在客户端的呢?
其实呢,现实中,浏览器和操作系统都会维护一个权威的第三方机构列表(包括它们的公钥)

CA如何将证书给我们的服务端的?
签合同-》付款-》 申请-》颁发。

  1. HTTP的简单实现流程(其实和上边的原理一样)

握手结束后,客户端和服务器端使用握手阶段产生的随机数以及挑选出来的算法进行对称加解密的传输。
  为什么不直接全程使用非对称加密算法进行数据传输?这个问题的答案是因为非对称算法的效率对比起对称算法来说,要低得多得多;因此往往只用在HTTPS的握手阶段。

以下是我们一些经常使用的加密算法
   非对称加密算法:RSA, DSA/DSS
   对称加密算法: AES, 3DES
   HASH算法:MD5, SHA1, SHA256

这就是HTTPS的基本原理。

上一篇下一篇

猜你喜欢

热点阅读