饥人谷技术博客

HTTPS的原理

2019-03-25  本文已影响2人  学的会的前端

HTTP的缺点:

  1. 通信使用明文(不加密),内容可能会被窃听;
  1. 不验证通信方的身份,因此有可能遭遇伪装;
  1. 无法证明报文的完整性,所以报文有可能已遭篡改。

密码学工具箱

密码学工具箱.png

用来对应密码的技术

对称加密(私有密钥加密)

有且仅有一个密钥加密解密。

非对称加密(公开密钥加密)

两个密钥。包括公钥和私钥,都可以进行加密和解密,但是公钥加密,私钥可解密;私钥加密,公钥可解密。

  1. 使用公开密钥方式安全地交换在稍后的共享密钥加密中要使用的密钥;
  2. 确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信。


    混合加密.png

单向散列(hash)

通过固定算法把数据生成固定长度的随机数。把一堆数据压缩成固定长度,不能恢复。

消息认证码

散列+共享密钥

数字签名

证书

公钥证书也叫数字证书或证书。数字证书认证机构处于客户端和服务器双方都可信赖的第三方机构的立场。(威瑞信)

PKI体系

PKI体系图.png

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

HTTPS原理概述

一个故事让你彻底理解HTTPS
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TSL协议替代而已。通常,HTTP直接和TCP通信,当使用SSL时,则HTTP先和SSL通信,再由SSL和TCP通信。

HTTPS的通信步骤

  1. 客户端通过发送Client Hello 报文开始SSL通信。
  2. 服务器可进行SSL通信时,会以Server Hello报文作为应答。
  3. 之后服务器发送Certificate报文,报文中包含公开密钥证书。
  4. 最后服务器发送Server Hello Done 报文通知客户端,最初阶段的SSL握手协商部分结束。
  5. SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。
  6. 接着客户端继续发送Change Cipher Spec报文。
  7. 客户端发送Finshed报文。
  8. 服务器同样发宋体Change Cipher Spec报文。
  9. 服务器同样发送Finshed报文。
  10. 服务器和客户端的Finshed报文交换完毕之后,SSL连接就算建立完成。
  11. 应用层协议通信,及发送HTTP协议。发送数据时会附加一种叫做MAC的报文摘要,MAC能够查知报文是否遭到篡改,从而保护报文的完整性。
  12. 最后由客户端断开连接,断开连接时,发送close_notify报文。

为什么不一直使用HTTPS协议进行通信呢?

  1. 与HTTP相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定会随之减少。
  2. 开销大,使用HTTPS协议,必须向认证机构(CA)购买证书。

SSL/TLS协议

SSL是独立于HTTP的协议,不仅仅是HTTP协议,其他运行在应用层的协议(SMIP和Telnet)均可配合SSL协议使用。SSL是当今世界上应用最为广泛的网络安全技术。

SSL/TLS协议流程

  1. 浏览器将自己支持的一套加密算法发给服务器,同时发一个浏览器随机数。
  2. 服务器向浏览器发送选择的加密算法、服务器生成的随机数、服务器数字证书。
  3. 浏览器收到证书后对证书的CA签名进行验证,如果验证通过,会从证书中拿到服务器的公钥。
  4. 浏览器对浏览器随机数+服务器随机数进行处理,生成预备主密码。
  5. 浏览器用服务器的公钥对预备主密码进行加密,发给服务器。
  6. 服务器收到后使用自己的私钥解密出预备主密钥。
    (主密码用来生成真正的共享密钥的)
  7. 浏览器和服务器分别使用预备主密钥和两个随机数,生成共享主密钥
  8. 二者使用共享主密钥,使用对称加密算法加密数据。

每次https请求,都需要使用上面的流程握手协商吗?

答:第一次协商主密钥后,后面的请求就使用主密钥进行对称加密通信,不需要再协商。通过会话id来识别。

上一篇 下一篇

猜你喜欢

热点阅读