TLS

传输层安全协议(Transport Layer Security, TLS)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。 TLS协议使用TCP协议进行传输,其他应用层协议(HTTP、DNS、SMTP等)可以在TLS协议之上建立安全的通信连接。

TLS Protocol

TLS诞生于1999年,最新版本为TLS 1.3发布于2018年。TLS协议的前身是安全套接层(Secure Sockets Layer, SSL)。 SSL共有 1.0 2.0 3.0 三个版本,SSL 3.1更名为TLS。TLS目前共有 1.0 1.1 1.2 1.3 四个版本,浏览器对TLS 1.0 1.1的支持将于2020年3月终止。

TLS协议主要做三件事:

  • 数据加密
  • 身份认证
  • 保证数据完整性

TLS工作过程

TLS协议是可选的,必须在客户端和服务器进行配置。

TLS工作过程分成3个阶段:

  • 对等协商支持的密钥算法
  • 基于非对称密钥的信息传输加密、身份认证以及基于PKI证书的身份认证
  • 基于对称密钥的数据传输保密

TLS 握手(TLS Handshake)

TLS协议建立安全连接的过程称为TLS握手。

要理解TLS握手过程,首先需要理解RSA密钥交换或迪菲-赫尔曼密钥交换。

TLS-SSL-handshake

  • 客户端和服务器端首先建立TCP连接,然后开始进行TLS握手。

  • 客户端发起clientHello请求 告诉服务器端自己支持的TLS协议版本、支持的加密套件以及随机数等其他一些参数

client-hello

  • 服务器端收到clientHello请求后确定TLS协议版本以及将要使用的加密套件,然后连带自己的CA证书、随机数等参数返给客户端 sever-hello

  • 客户端使用根证书内的公钥验证服务器端提供的CA证书。证书验证通过后用进行RSA密钥交换或迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange), 客户端用前面协商好的算法生成premaster secret并用服务器CA证书内的公钥加密后发送给服务器端 client-key-exchange

  • 服务器端用自己的私钥解密出premaster secret,并用premaster secret、客户端随机数和服务器随机数生成48位master secret, 再用master secret 生成用于加密和解密的一对key

new-session-ticket

客户端和服务器端用premaster secret、客户端随机数和服务器随机数生成48位master secret 服务器端和客户端再使用master secret各生成一对key分别用于加密数据和校验数据

  • client_write_MAC_key/client_write_IV
  • server_write_MAC_key/server_write_IV
  • client_write_key
  • server_write_key

TLS 记录(TLS Record)

RFC 8446

参考资料