1. Introduction (简介)
TLS协议的主要目标是在两个通信应用程序之间提供隐私和数据完整性. 该协议由两层组成: TLS记录协议 (TLS Record Protocol) 和TLS握手协议 (TLS Handshake Protocol). 在最低层, 位于某种可靠传输协议 (如TCP [TCP]) 之上的是TLS记录协议. TLS记录协议提供的连接安全具有两个基本属性:
-
连接是私密的 (private). 对称密码学 (Symmetric cryptography) 用于数据加密 (例如, AES [AES], RC4 [SCH]等). 这种对称加密的密钥对每个连接唯一生成, 并基于由另一个协议 (如TLS握手协议) 协商的秘密. 记录协议也可以在不加密的情况下使用.
-
连接是可靠的 (reliable). 消息传输包括使用带密钥的MAC进行消息完整性检查. 安全哈希函数 (Secure hash functions) (例如, SHA-1等) 用于MAC计算. 记录协议可以在没有MAC的情况下运行, 但通常仅在另一个协议使用记录协议作为传输层来协商安全参数时才以此模式使用.
TLS记录协议用于封装各种更高层协议. 其中一个封装的协议是TLS握手协议, 它允许服务器和客户端在应用协议传输或接收其第一个字节的数据之前相互进行身份验证 (authenticate), 并协商加密算法和加密密钥. TLS握手协议提供的连接安全具有三个基本属性:
-
对等方的身份可以使用非对称或公钥密码学 (asymmetric, or public key, cryptography) 进行验证 (例如, RSA [RSA], DSA [DSS]等). 这种身份验证可以是可选的, 但通常至少需要验证其中一个对等方.
-
共享秘密的协商是安全的: 协商的秘密对窃听者不可用, 并且对于任何经过身份验证的连接, 该秘密都无法获得, 即使攻击者能够将自己置于连接的中间位置.
-
协商是可靠的: 没有攻击者可以在不被通信各方检测到的情况下修改协商通信.
TLS的一个优势是它与应用协议无关 (application protocol independent). 更高层协议可以透明地分层在TLS协议之上. 然而, TLS标准并未规定协议如何使用TLS添加安全性; 关于如何启动TLS握手以及如何解释交换的身份验证证书的决策, 留给在TLS之上运行的协议的设计者和实现者来判断.
1.1. Requirements Terminology (需求术语)
本文档中的关键词 "MUST" (必须), "MUST NOT" (禁止), "REQUIRED" (必需), "SHALL" (应), "SHALL NOT" (不应), "SHOULD" (应该), "SHOULD NOT" (不应该), "RECOMMENDED" (推荐), "MAY" (可以), 以及 "OPTIONAL" (可选) 应按照RFC 2119 [REQ] 中的描述进行解释.
1.2. Major Differences from TLS 1.1 (与TLS 1.1的主要差异)
本文档是TLS 1.1 [TLS1.1] 协议的修订版, 包含改进的灵活性, 特别是在密码学算法协商方面. 主要变更包括:
-
伪随机函数 (PRF, pseudorandom function) 中的MD5/SHA-1组合已被密码套件指定的PRF替换. 本文档中的所有密码套件都使用P_SHA256.
-
数字签名元素中的MD5/SHA-1组合已被单个哈希替换. 签名元素现在包含一个明确指定所使用哈希算法的字段.
-
大幅度清理了客户端和服务器指定其将接受哪些哈希和签名算法的能力. 请注意, 这也放宽了对TLS先前版本中签名和哈希算法的一些约束.
-
增加了对带附加数据的认证加密模式 (authenticated encryption with additional data modes) 的支持.
-
TLS扩展定义和AES密码套件从外部 [TLSEXT] 和 [TLSAES] 合并进来.
-
更严格地检查EncryptedPreMasterSecret版本号.
-
收紧了许多要求.
-
verify_data长度现在取决于密码套件 (默认值仍为12).
-
清理了Bleichenbacher/Klima攻击防御的描述.
-
在许多情况下现在必须 (MUST) 发送警报 (Alerts).
-
在certificate_request之后, 如果没有可用的证书, 客户端现在必须 (MUST) 发送空的证书列表.
-
TLS_RSA_WITH_AES_128_CBC_SHA现在是强制实现 (mandatory to implement) 的密码套件.
-
添加了HMAC-SHA256密码套件.
-
移除了IDEA和DES密码套件. 它们现在已被弃用, 并将在单独的文档中记录.
-
对SSLv2向后兼容hello的支持现在是可以 (MAY), 而不是应该 (SHOULD), 发送它是不应该 (SHOULD NOT). 未来支持可能会变成不应该 (SHOULD NOT).
-
向表示语言 (presentation language) 添加了有限的"fall-through"功能, 以允许多个case分支具有相同的编码.
-
添加了实现陷阱 (Implementation Pitfalls) 章节.
-
常规的澄清和编辑工作.