Skip to main content

1. Introduction (简介)

TLS的主要目标是在两个通信对等体之间提供安全通道 (Secure Channel),对底层传输的唯一要求是可靠的、有序的数据流。具体而言,安全通道应提供以下属性:

  • 认证 (Authentication): 通道的服务器端始终经过认证,客户端可选择性地进行认证。认证可以通过非对称加密 (Asymmetric Cryptography) (例如RSA [RSA]、椭圆曲线数字签名算法 (ECDSA) [ECDSA] 或Edwards曲线数字签名算法 (EdDSA) [RFC8032]) 或对称预共享密钥 (PSK) 进行。

  • 机密性 (Confidentiality): 通道建立后通过该通道发送的数据仅对端点可见。TLS不会隐藏其传输的数据长度,但端点能够填充TLS记录以模糊长度并改进对流量分析技术的防护。

  • 完整性 (Integrity): 通道建立后通过该通道发送的数据不能被攻击者修改而不被检测到。

即使在攻击者完全控制网络的情况下,这些属性也应该成立,如[RFC3552]中所述。有关相关安全属性的更完整陈述,请参见附录E。

TLS由两个主要组件组成:

  • 握手协议 (Handshake Protocol) (第4节),用于认证通信方、协商加密模式和参数,并建立共享密钥材料。握手协议旨在抵抗篡改,主动攻击者不应能够强制对等体协商与连接未受攻击时不同的参数。

  • 记录协议 (Record Protocol) (第5节),使用握手协议建立的参数来保护通信对等体之间的流量。记录协议将流量划分为一系列记录,每个记录使用流量密钥独立保护。

TLS是应用协议独立的,更高层协议可以透明地在TLS之上分层。然而,TLS标准并未规定协议如何使用TLS添加安全性,如何启动TLS握手以及如何解释交换的认证证书,这些都留给运行在TLS之上的协议的设计者和实现者判断。

本文档定义了TLS版本1.3。虽然TLS 1.3与以前的版本不直接兼容,但所有版本的TLS都包含版本控制机制,允许客户端和服务器在双方都支持的情况下可互操作地协商通用版本。

本文档取代并废弃了TLS的先前版本,包括版本1.2 [RFC5246]。它还废弃了[RFC5077]中定义的TLS票据机制,并用第2.2节中定义的机制替换它。由于TLS 1.3改变了密钥派生方式,它按照第7.5节中的描述更新了[RFC5705]。它还改变了在线证书状态协议 (OCSP) 消息的承载方式,因此按照第4.4.2.1节中的描述更新了[RFC6066]并废弃了[RFC6961]。

1.1 Conventions and Terminology (约定和术语)

本文档中的关键词"MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"NOT RECOMMENDED"、"MAY"和"OPTIONAL"应按照BCP 14 [RFC2119] [RFC8174]中的描述进行解释,当且仅当它们以全大写形式出现时,如此处所示。

使用以下术语:

client (客户端): 发起TLS连接的端点。

connection (连接): 两个端点之间的传输层连接。

endpoint (端点): 连接的客户端或服务器。

handshake (握手): 客户端和服务器之间的初始协商,建立它们在TLS内后续交互的参数。

peer (对等体): 一个端点。在讨论特定端点时,"peer"指的是不是讨论主题的端点。

receiver (接收者): 正在接收记录的端点。

sender (发送者): 正在传输记录的端点。

server (服务器): 未发起TLS连接的端点。

1.2 Major Differences from TLS 1.2 (与TLS 1.2的主要差异)

以下是TLS 1.2和TLS 1.3之间主要功能差异的列表。它并非详尽无遗,还有许多细微差异。

  • 支持的对称加密算法列表已删除所有被视为遗留的算法。保留的算法都是带关联数据的认证加密 (AEAD) 算法。密码套件 (Cipher Suite) 概念已更改,将认证和密钥交换机制与记录保护算法 (包括密钥长度) 以及与密钥派生函数和握手消息认证码 (MAC) 一起使用的哈希分离。

  • 添加了零往返时间 (0-RTT) 模式,在连接建立时为某些应用数据节省一次往返,但代价是某些安全属性。

  • 已删除静态RSA和Diffie-Hellman密码套件,所有基于公钥的密钥交换机制现在都提供前向保密 (Forward Secrecy)。

  • ServerHello之后的所有握手消息现在都已加密。新引入的EncryptedExtensions消息允许先前在ServerHello中明文发送的各种扩展也享有机密性保护。

  • 密钥派生函数已重新设计。新设计由于其改进的密钥分离属性,使密码学家更容易分析。基于HMAC的提取和扩展密钥派生函数 (HKDF) 被用作底层原语。

  • 握手状态机已进行重大重组,以更加一致并删除多余的消息,如ChangeCipherSpec (除非需要中间盒兼容性时)。

  • 椭圆曲线算法现在在基本规范中,并包含新的签名算法,如EdDSA。TLS 1.3删除了点格式协商,转而为每条曲线使用单一点格式。

  • 进行了其他加密改进,包括将RSA填充更改为使用RSA概率签名方案 (RSASSA-PSS),以及删除压缩、数字签名算法 (DSA) 和自定义临时Diffie-Hellman (DHE) 组。

  • TLS 1.2版本协商机制已被弃用,转而使用扩展中的版本列表。这增加了与错误实现版本协商的现有服务器的兼容性。

  • 具有和不具有服务器端状态的会话恢复以及早期TLS版本的基于PSK的密码套件已被单个新的PSK交换所取代。

  • 参考文献已更新为指向RFC的更新版本 (例如RFC 5280而不是RFC 3280)。

1.3 Updates Affecting TLS 1.2 (影响TLS 1.2的更新)

本文档定义了几项可选地影响TLS 1.2实现的更改,包括那些不支持TLS 1.3的实现:

  • 第4.1.3节中描述了版本降级保护机制。

  • 第4.2.3节中定义了RSASSA-PSS签名方案。

  • "supported_versions" ClientHello扩展可用于协商要使用的TLS版本,优先于ClientHello的legacy_version字段。

  • "signature_algorithms_cert"扩展允许客户端指示它可以在X.509证书中验证哪些签名算法。

此外,本文档澄清了早期版本TLS的一些合规要求,请参见第9.3节。