TLS 1.3
https://imququ.com/post/enable-tls-1-3.html // 编译 nginx
- reducing handshake latency
- encrypting more of the handshake
- improving resiliency to cross-protocol attacks
- removing legacy features
检查:openssl s_client -connect www.simplehttps.com:443 -tls1_3
在以往的TLS协议中是这样实现的:
- 加密:使用对称加密算法(块加密、流加密)加密会话数据,密钥交换主要通过非对称算法加密会话过程中使用的对称密钥传递给对方来实现(RSA)。从 TLS 1.0 起引入了 DH 密钥交换算法作为另一种可选的密钥交换算法(需要加一次握手)。
- 完整性校验:使用 MAC(message-authentication code) 对发送的报文进行完整性校验计算,先计算 MAC 再加密。在TLS 1.2中引入了更具有安全性的 AEAD 算法(同时完成加密和完整性校验)作为一个加密机制的备选选项 。
- 身份认证:所有的身份认证都基于证书公钥体系完成。
TLS 1.3 彻底废弃了 RSA 密钥交换算法,只允许使用 DH 密钥交换算法(加入了客户端非对称加密,临时性),因为RSA 密钥交换过程安全性完全依赖于服务器私钥的安全性。
TLS 1.3 减少了 DH 的参数选择,降低复杂性
TLS 1.3 废弃了使用 MAC 的块加密(cipher block chaining,CBC)和流加密(RC4)机制(完整性校验,防止中间人修改),采用 AEAD (authenticated encryption with additional data) 类对称加密算法作为替代。
对握手部分进行加密,并且在开始进行握手时就发送了客户端的临时公钥。1-RTT 模式:
TLS 1.3 引入了一种新的密钥协商机制——PSK,启发自 QUIC,不过有被拦截的风险,In either case, it’s prudent for the server to reject the 0-RTT data.
PSK(pre-shared key)——新的密钥交换暨身份认证机制
- 0-RTT:客户端和服务端的一次交互(客户端发一个报文,服务端回应一个报文)叫做一个 RTT,TLS 1.2 普遍采用 2-RTT 的握手过程,服务器延迟明显。因此 TLS 1.3 引入了一种 0-RTT 的机制,即在刚开始 TLS 密钥协商的时候,就能附送一部分经过加密的数据传递给对方。
- 为了实现 0-RTT,需要双方在刚开始建立连接的时候就已经持有一个对称密钥,这个密钥在TLS 1.3中称为PSK。
- PSK 是 TLS 1.2 中的 rusumption 机制的一个升级,TLS 握手结束后,服务器可以发送一个 NST(new_session_ticket)的报文给客户端,该报文中记录 PSK 的值、名字和有效期等信息,双方下一次建立连接可以使用该 PSK 值作为初始密钥材料。
- 因为 PSK 是从以前建立的安全信道中获得的,只要证明了双方都持有相同的 PSK,不再需要证书认证,就可以证明双方的身份,因此,PSK 也是一种身份认证机制。
// 0-RTT 最终没有成为规范
HKDF(HMAC_based_key_derivation_function)——新的密钥导出函数
AEAD(Authenticated_Encrypted_with_associated_data)将完整性校验和数据加密两种功能集成在同一算法中完成