HTTPS
Chunbin Lv3

为什么要使用HTTPS

HTTP的明文传输,需要一个加密方案

安全层的实现过程

对称加密

过程

先协商加解密方式,让服务器和客户端同时决定密钥

  1. 浏览器发送它所支持的加密套件列表和一个随机数 client-random,这里的加密套件是指加密的方法,加密套件列表就是指浏览器能支持多少种加密方法列表
  2. 服务器会从加密套件列表中选取一个加密套件,然后还会生成一个随机数 service-random,并将 service-random 加密套件返回给浏览器。
  3. 浏览器和服务器分别返回确认消息
  4. 把client-random 和 service-random 混合起来生成一个密钥master secret,使用master secret和加密套件后进行数据的加密传输。

使用非对称加密

服务器会把公钥发给浏览器,私钥自己留下来。使用公钥加密,只能用私钥解密。

过程

  • 浏览器发送支持的加密套件列表
  • 服务器选择一个加密套件,把服务器的公钥和加密套件一起发送给浏览器
  • 浏览器和服务器返回确认消息

缺点

  1. 非对称加密的效率低
  2. 无法保证服务器发送给浏览器的数据安全,服务器数据是用私钥加密的,黑客可以获得公钥,不能保证服务器数据的安全

对称加密和非对称加密结合

结合以上两种方案,在传输数据阶段依然使用对称加密,但是对称加密的密钥我们采用非对称加密来传输

过程

  • 浏览器向服务器发送对称加密套件列表、非对称加密套件列表和随机数client-random
  • 服务器保存随机数client-random,选择对称加密和非对称加密套件,生成随机数service-random,向浏览器发送选择的加密套件、service-random和公钥
  • 浏览器保存公钥,生成随机数pre-master,然后利用公钥对pre-master加密,黑客无法获得。并向服务器发送加密后的数据
  • 最后服务器拿出自己的私钥,解密出pre-master数据,返回确认消息
  • client-random + service-random+ pre-master 生成 master secret
  • 使用master-secret加密传输的数据

缺点

  • 防止不了DNS劫持攻击,浏览器完全不知道访问的节点是否可以信任

添加数字证书

为了解决以上问题,即证明"我就是我",我们引入数字证书
服务器通过向CA申请数字证书,证明自己是真正的网站

过程

与上一版本的过程对比,有了两点改变

  1. 服务器没有直接返回公钥,而是返回数字证书,公钥包含在数字证书中的。
  2. 在浏览器端多了一步证书验证的操作,验证了证书后,才继续后续的流程

数字证书的验证过程

  • 采用 CA 签名时相同的 Hash 函数来计算并得到信息摘要 A
  • 使用CA的公钥解密签名数据,得到信息摘要 B
  • 比较信息摘要A和消息摘要B,相同则说明签名验证成功
由 Hexo 驱动 & 主题 Keep
访客数 访问量