HTTP 与 HTTPS 本质上是一样的,只 HTTPS 在 HTTP 基础上加了一层安全层

HTTPS 是在 HTTP 的基础上,提供了对数据加密的支持
保证数据

  • 私密性
  • 完整性

用于

  • 认证客户端和服务器身份

    为什么安全

    普通 HTTP 协议中

  • 数据是明文传输,很容易有中间人窃听数据

    • 对客户端把自己伪装成服务器
    • 对服务端把自己伪装成客户端

从而非法获取通信数据

HTTPS 协议中

  • 数据是加密传输,利用非对称公钥加密机制
  • 保证数据不被篡改
  • 认证通信双方身份
  • 基本避免中间人攻击

HTTPS 的安全基础是 SSL/TLS

TLS 握手机制

HTTPS 通信加密是使用 TLS 协议实现

  • TLS Transport Layout Security 安全传输层协议
  • 前身是 SSL Secure Sockets Layer 安全套接字协议

为网络通信提供安全及数据完整性的一种安全协议,对网络连接时行加密。

在客户端和服务器正常通信之前 (HTTP 握手之前),会有一个握手过程。

以浏览器访问 HTTPS 网站,且 HTTPS 网站服务器提供单向认证为例描述握手过程(握手过程根据 Key 的交换算法的不同而不同,比如 RSA 、DiffieHellman ,这里以 RSA 为例)
image.png

  1. 浏览器发起 ClientHello 消息,包含支持的 TLS 版本,加密算法集合(Cipher Suite),随机数
  2. 服务器
    1. 发送 ServerHello 消息,包含双方共同支持的 TLS 版本,加密算法集,另一个随机数
    2. 然后发送 Certificate 消息,附加服务器的证书
    3. 最后发送 ServerHelloDone 消息
  3. 浏览器接收消息后
    1. 验证服务器证书是否为受信任的证书机构(CA)签发
    2. 是否真实的服务器(认证)
    3. 使用证书附带的公钥生成 premaster secret 作为 ClientKeyExchange 消息体发送给服务器
  4. 服务器收到后使用私钥解密 premaster secret
  5. 随后浏览器和服务器
    1. 使用 premaster secret 和之前生成的服务器 + 浏览器全部随机数
      1. 生成相同的 master key 用于加密和解密后续的所有通信
  6. 浏览器
    1. 发送 ChangeCipherSpec 消息
    2. 然后发送使用 master key 加密的 finished 消息
  7. 服务器接收并验证,然后同样给浏览器发送 ChangeCipherSpec 消息和使用 master key 加密的 finished 消息,浏览器接收并验证
  8. 握手完成