3. 基于 TLS 的 TACACS+
基于 TLS 的 TACACS+ 采用 [RFC8907] 中定义的协议, 移除混淆选项, 并规定使用 TLS 1.3 进行传输. 它使用一个新的众所周知默认主机端口号. 以下各节提供进一步的细节和指导.
将 TLS 引入 TACACS+ 是为了满足以下要求:
-
机密性和完整性 (Confidentiality and Integrity): [RFC8907] 中指定的混淆机制以 MD5 算法为基础, 而 MD5 在用于加密时已被证明是不安全的 [RFC6151]. 这会阻止 TACACS+ 用于符合 [FIPS-140-3] 的部署. 使用 TLS 保护 TACACS+ 协议, 旨在不要求提供安全网络的情况下提供机密性和完整性.
-
对等方认证 (Peer authentication): TLS 的认证能力取代混淆机制中的共享密钥, 用于相互认证.
本文档遵循 [REQ-TLS13] 中的建议.
3.1. 分离 TLS 连接
实现本文档所定义 TACACS+ 协议变体的对等方 MUST 应用相互认证, 并加密它们之间交换的所有数据. 因此, 当为该服务建立 TCP 连接时, TLS 握手会立即开始. MUST NOT 使用将初始非 TLS 连接升级的选项, 参见 Section 5.3.
为确保使用 TLS 的 TACACS+ 流量与不使用 TLS 的 TACACS+ 流量明确分离, 参见 Section 5.3, 支持基于 TLS 的 TACACS+ 的服务器 MUST 在不同于非 TLS TACACS+ 服务器所用端口的 TCP/IP 端口上监听. 进一步 RECOMMENDED 将 TLS 和非 TLS 服务部署在不同主机上, 如 Section 5.1.1 所讨论.
鉴于现有 TACACS+ 客户端实现中默认端口使用的普遍性, 本规范为基于 TLS 的 TACACS+ 分配众所周知的 TCP 端口号 300, 参见 Section 7.
虽然强烈鼓励使用指定端口号, 但有特定要求的部署 MAY 使用替代 TCP 端口号. 在这种情况下, 操作者必须仔细考虑 Section 5.3 中描述的运维影响.
3.2. TLS 连接
TACACS+ 客户端通过在 TACACS+ TLS 端口号上向已配置的 TLS TACACS+ 服务器建立 TCP 连接来发起 TLS 连接. 一旦 TCP 连接建立, 客户端 MUST 在发送任何 TACACS+ 协议数据之前立即开始 TLS 协商.
传输 MUST 至少使用 TLS 1.3 [RFC8446]. 预期本文档所描述的 TACACS+ 将可与未来版本的 TLS 一起工作. MUST NOT 使用更早版本的 TLS.
TLS 连接成功建立后, TACACS+ 数据交换 MUST 按照 [RFC8907] 中定义的过程进行. 然而, 所有 TACACS+ 消息 SHALL 作为 TLS 应用数据传输. 在 TLS 上运行时 MUST NOT 应用 [RFC8907] 中定义的 TACACS+ 混淆机制 (Section 4).
连接生命周期
TLS TACACS+ 连接通常不是长生命周期连接. 如果任一对等方遇到错误或空闲超时, 该连接将由该对等方关闭.
- 对于未在 单连接模式 (Single Connection Mode) 下运行的连接, 该模式定义见 [RFC8907] Section 4.3, 关联的 TACACS+ 会话完成后 SHALL 关闭 TCP 会话.
- 在 Single Connection Mode 下运行的连接 MAY 持续更长时间, 但通常会在短暂空闲后超时并关闭.
- 因此, 不要求支持传输层 keepalive 机制.
连接关闭的原因与 TLS 恢复无关, 除非连接因 TLS 错误而关闭, 在这种情况下 ticket 可能已失效.
除 IPv4 外, TACACS+ 客户端和服务器也广泛支持 IPv6 配置. 本文档不更改该领域的建议.
3.3. TLS 认证选项
实现 MUST 支持基于证书的相互认证 (certificate-based mutual authentication), 以提供部署间互操作性的核心选项. 该认证选项在 Section 3.4 中规定.
除基于证书的 TLS 认证之外, 实现 MAY 支持以下替代认证机制:
- 预共享密钥 (Pre-Shared Keys, PSKs) (Section 3.5), 在 TLS 1.3 中也称为外部 PSK.
- 原始公钥 (Raw Public Keys, RPKs). RPK 的细节被视为超出本文档范围. 关于实现, 部署和安全考虑, 见 [RFC7250] 和 [RFC8446] Section 4.4.2.
3.4. 基于 TLS 证书的认证
TLS 证书认证是基于 TLS 的 TACACS+ 的主要认证选项. 本节仅涵盖基于证书的认证.
正确部署基于 TLS 证书的认证将显著提高 TACACS+ 部署的安全性. 实现者和操作者必须理解基于 TLS 证书的认证解决方案所带来的影响, 包括正确处理证书, 证书颁发机构 (Certificate Authorities, CAs) 以及 TLS 配置的所有要素. 指导信息可从 [BCP195] 开始.
每个对等方 MUST 按照 Section 3.4.1 中的描述验证其远端对等方的证书路径, 包括撤销检查.
如果验证成功, 则认证成功并允许连接. 策略可以对对等方施加进一步约束, 根据证书字段或实现暴露的任何其他参数允许或拒绝连接.
除非通过配置禁用, 否则对等方 MUST NOT 允许任何出示无效 TLS 证书的对等方建立连接.
3.4.1. TLS 证书路径验证
基于证书的相互认证实现 MUST 支持 [RFC5280] Section 6 中描述的证书路径验证.
在某些部署中, 某个对等方可能与远端对等方的 CA 隔离. 面向这些部署的实现 MUST 支持证书链, 也称为 bundle 或信任链, 其中远端对等方证书的完整链存储在本地对等方上.
SHOULD 实现 TLS Cached Information Extension [RFC7924]. 这 MAY 通过 RPK [RFC7250] 增强, 但必须处理撤销, 因为撤销不是该规范的一部分.
3.4.2. TLS 证书标识
对于所出示 TLS TACACS+ 服务器身份的客户端侧验证, 实现 MUST 遵循 [RFC9525] 中定义的验证技术. 标识符类型 DNS-ID, IP-ID 或 SRV-ID 适用于 TLS TACACS+ 协议, 由操作者根据部署设计进行选择. TLS TACACS+ 不使用 URI-ID 进行 TLS TACACS+ 服务器身份验证.
TLS TACACS+ 服务器身份中的通配符允许一个证书保护部署中的多个服务器, 从而简化证书管理. 然而, 这会引入安全风险, 因为通配符证书的私钥一旦泄露, 会影响使用该证书的所有服务器. 为应对这些风险, MUST 遵循 [RFC9525] Section 6.3 中的指导原则, 并且 SHOULD 将通配符限制在专用于 TACACS+ 服务器的子域中.
实现 MUST 支持 TLS Server Name Indication (SNI) 扩展 ([RFC6066] Section 3). TLS TACACS+ 客户端 MUST 支持配置 TLS TACACS+ 服务器域名的能力, 以便将其包含在 client hello 的 SNI "server_name" 扩展中.
3.4.3. 密码套件要求
实现 MUST 支持 TLS 1.3 强制密码套件 ([RFC8446] Section 9.1). 读者应参考 [BCP195]. 所提供或接受的密码套件 SHOULD 可配置, 以便操作者进行适配.
3.5. TLS PSK 认证
作为基于证书的认证的替代方案, 实现 MAY 支持 PSK, 它们在 TLS 1.3 [RFC8446] 中也称为外部 PSK. 它们不应与恢复 PSK 混淆.
外部 PSK 的使用不如基于证书的认证成熟. RECOMMENDED 系统遵循 [RFC9257] 和 [RFC8446] Section 4 的指导.
在实现 PSK 认证的地方, MUST 支持至少 16 个八位组的 PSK 长度.
PSK identity MUST 遵循 [RFC9257] Section 6.1 的建议. 实现 MUST 支持至少 16 个八位组的 PSK identity.
虽然本文档移除了混淆选项 (Section 4), 但组织中仍可能同时存在 TLS 和非 TLS 版本的 TACACS+, 例如在迁移期间 (Section 6.1). 在这种情况下, 为 TACACS+ 混淆客户端配置的共享密钥 MUST NOT 与为 TLS 客户端配置的 PSK 相同.
3.6. TLS 恢复
TLS 恢复 (TLS Resumption) [RFC8446] 可以最小化握手过程中所需的往返次数. 如果 TLS 客户端持有先前从 TLS TACACS+ 服务器的 NewSessionTicket 消息中提取的 ticket, 它可以使用与该 ticket 绑定的 PSK identity.
当客户端持有来自 TLS TACACS+ 服务器的有效且未使用 ticket 时, SHOULD 使用恢复, 因为每个 ticket 仅供单次使用, 并会在恢复期间刷新. TLS TACACS+ 服务器可以拒绝恢复请求, 但如果相关 ticket 尚未过期且之前未被使用, TLS TACACS+ 服务器 SHOULD 允许恢复.
处理 TLS 恢复时, 必须验证证书, 以检查自上一个 NewSessionTicket Message 以来期间内的撤销情况.
恢复的 ticket_lifetime SHOULD 可配置, 包括零秒生命周期. 关于 ticket 生命周期的指导, 见 [RFC8446] Section 4.6.1.