因为 HTTP (明文)不安全,所以引入 HTTPS 通信安全 = 机密性 + 完整性 + 身份认证 + 不可否认

9e99f797de30a15a11b0e4b4c8f810cf.png

SSL/TLS

  • SSL:安全套接层(Secure Sockets Layer)
  • TLS:传输层安全(Transport Layer Security) — 升级版 SSL

    TLS 协议组成

    tls_5_proto.png

    TLS 是拿来做加密数据传输的,采用 认证密钥协商 + 对称加密传输 的结构

  • 握手协议(handshake protocol):做认证密钥协商

  • 密钥规格变更协议(change cipher spec protocol)
  • 警告协议(alert protocol)
  • 记录协议(record protocol):做对称加密传输

    record 协议

    做应用数据的对称加密传输,占据一个 TLS 连接的绝大多数流量

微信截图_20210312101659.png
从应用层接收数据,然后做以下操作:

  1. 生成序列号,为每个数据块生成唯一编号,防止被重放或被重排序
  2. 压缩:可选,使用握手协议协商出的压缩算法做压缩
  3. 加密:使用握手协议协商出来的 key 做加密/解密

    handshake 协议

    handshake protocol 用于产生给 record protocol 使用的 SecurityParameters

  • 客户端和服务端协商 TLS 协议版本号和 CipherSuite(密码套件)
  • 认证对端的身份(可选,一般如 https 是客户端认证服务端的身份)
  • 使用密钥协商算法生成共享的 master secret

步骤如下:

  1. 交换 Hello 消息,协商出算法,交换 random 值,检查 session resumption(恢复)
  2. 交换必要的密码学参数,来允许 client 和 server 协商出 premaster secret
  3. 交换证书和密码学参数,让 client 和 server 做认证,证明自己的身份
  4. 从 premaster secret 和交换的 random 值,生成出 master secret
  5. 把 SecerityParameters 提供给 record 层
  6. 允许 client 和 server 确认对端得出了相同的 SecurityParameters,并且握手过程的数据没有被攻击者篡改

dsGdfh.webp_-865x1024.jpg

从加解密的角度思考

  • 使用对称和非对称的混合加密方式,解决数据传输安全问题
    • 在传输数据阶段使用对称加密,对称加密的密钥使用非对称加密来传输
  • 引入中间机构 CA (Certificate Authority),CA 通过给服务器颁发数字证书(Digital Certificate),解决浏览器对服务器的信任问题

步骤如下:

  1. 浏览器向服务器发送对称加密套件列表、非对称加密套件列表和随机数 client-random
  2. 服务器保存随机数 client-random,选择对称加密和非对称加密的套件,然后生成随机数 service-random,向浏览器发送选择的加密套件、service-random 和数字证书
  3. 浏览器验证证书,生成随机数 pre-master,然后利用公钥对 pre-master 加密,并向服务器发送加密后的数据
  4. 服务器拿出自己的私钥,解密出 pre-master 数据,并返回确认消息

77c852ff2202b2b7bb3299a96a0f4aaf.png

数字证书申请流程

1591530587403-eae13a26-c17d-4217-bd48-b453bcd945d1.png

浏览器验证证书的流程

  • 证书的有效期
  • 证书是否被 CA 吊销
  • 证书是否是合法的 CA 机构颁发的

43a732eb2ba47d06fbef20c515bd990b.png

加密算法

对称加密

微信截图_20210313094926.png

非对称加密

私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人

随机数

使用随机数来生成对称加密算法。这样就可以做到服务器和客户端每次交互都是新的加密算法、只有在交互的那一该才确定加密算法

参考资料

  1. 透视 HTTP 协议
  2. SSL/TLS 协议详解
  3. TLS协议分析 与 现代加密通信协议设计
  4. 什么是SSL / TLS握手?图文解说SSL / TLS握手过程
  5. 也许,这样理解HTTPS更容易
  6. TLS 握手期间会发生什么?| SSL 握手
  7. 36 | HTTPS:让数据传输更安全
  8. 加餐六|HTTPS:浏览器如何验证数字证书?