Skip to main content

2. 基于TLS的TACACS+ (TACACS+ over TLS)

2.1. 将TACACS+会话与TLS连接分离 (Separating TACACS+ Sessions and TLS Connections)

TACACS+会话(Session)和TLS连接(Connection)是两个不同的概念,需要明确区分:

TACACS+会话

  • 定义: 由[RFC8907]定义的应用层交互
  • 组成: 一系列相关的TACACS+请求/响应对
  • 生命周期: 由应用逻辑决定
  • 示例: 用户认证会话、命令授权会话

TLS连接

  • 定义: 传输层安全连接
  • 功能: 为TACACS+消息提供加密和完整性保护
  • 生命周期: 可以承载多个TACACS+会话

关系模型

+------------------+
| TACACS+ Session | (应用层)
+------------------+
|
v
+------------------+
| TLS Connection | (传输层)
+------------------+
|
v
+------------------+
| TCP Connection | (网络层)
+------------------+

重要原则:

  • 一个TLS连接可以承载多个TACACS+会话(单连接模式)
  • 一个TACACS+会话不得跨越多个TLS连接
  • TLS连接失败不应影响应用层重试逻辑

2.2. TLS连接 (TLS Connection)

TLS版本要求

必须(MUST)使用TLS 1.3 [RFC8446]:

  • 提供现代加密算法
  • 支持0-RTT握手(可选)
  • 简化的握手过程

不得(MUST NOT)使用:

  • TLS 1.2或更早版本
  • SSL的任何版本

TLS配置

密码套件(Cipher Suites):

  • 必须支持[RFC8446]中定义的强制密码套件
  • 推荐使用具有前向保密的AEAD密码套件
  • 示例: TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384

扩展(Extensions):

  • 支持服务器名称指示(SNI)[RFC6066]
  • 支持应用层协议协商(ALPN)[RFC7301]
    • ALPN协议标识符: "tacacs"

握手过程

  1. 客户端发起:

    Client -> Server: ClientHello (含ALPN "tacacs")
  2. 服务器响应:

    Server -> Client: ServerHello, Certificate(可选), Finished
  3. 完成握手:

    Client -> Server: Finished
  4. 开始TACACS+通信:

    Client <-> Server: TACACS+ packets (加密)

2.3. 端口与服务 (Ports and Service)

标准端口

TACACS+ over TLS:

  • TCP端口65000: IANA分配的官方端口
  • 服务名称: "tacacss"(TACACS Secure)

传统TACACS+(明文或遗留加密):

  • TCP端口49: 历史端口(不推荐用于新部署)
  • 仅在无法升级的环境中使用

端口选择建议

  1. 新部署: 必须使用端口65000

  2. 迁移场景:

    • 服务器同时监听端口49和65000
    • 客户端优先尝试端口65000
    • 逐步淘汰端口49
  3. 防火墙配置:

    允许: TCP 65000 (TACACS+ over TLS)
    考虑限制: TCP 49 (传统TACACS+)

2.4. TLS PSK (TLS Pre-Shared Key)

TLS 1.3支持两种身份验证模式:证书和预共享密钥(PSK)。

PSK模式

适用场景:

  • 封闭网络环境
  • 证书管理复杂的场景
  • 需要快速握手的场景(0-RTT)

配置要求:

  • PSK标识符(PSK Identity)必须在客户端和服务器之间预先配置
  • PSK密钥长度至少256位
  • 每个客户端-服务器对使用唯一PSK

安全考虑:

  • PSK必须通过安全通道分发
  • 定期轮换PSK密钥
  • PSK不得基于弱口令生成

PSK与TACACS+共享密钥的关系

重要: TLS PSK ≠ TACACS+共享密钥

  • TLS PSK用于TLS层身份验证
  • TACACS+共享密钥([RFC8907])用于遗留加密(已废弃)
  • 使用TLS时,不再需要TACACS+共享密钥

2.5. 服务器身份验证 (Server Authentication)

基于证书的身份验证(推荐)

服务器证书要求:

  • 必须由受信任的CA签发
  • 证书主题或SAN必须匹配服务器主机名/IP
  • 证书必须在有效期内
  • 支持吊销检查(CRL或OCSP)

客户端验证流程:

1. 接收服务器证书
2. 验证证书链到受信任的根CA
3. 检查证书有效期
4. 验证主机名匹配
5. 检查吊销状态(可选但推荐)

证书部署建议:

  • 使用企业内部PKI
  • 或使用公共CA(如Let's Encrypt)
  • 实施证书自动更新机制

客户端证书(可选)

双向TLS(mTLS):

  • 服务器也可要求客户端证书
  • 提供更强的相互认证
  • 适用于高安全性要求场景

2.6. 点对点 (Peer-to-Peer)

对等连接模式

在某些网络拓扑中,TACACS+可能以点对点方式运行:

  • 两个设备互为客户端和服务器
  • 需要双向TLS支持

实现要点:

  • 每个节点需要服务器证书(或PSK配置)
  • 每个节点必须能够发起和接受TLS连接
  • 保持角色一致性(谁是认证者/被认证者)

连接管理

连接保持(Keep-Alive):

  • 推荐使用TCP keep-alive机制
  • TLS层可使用心跳扩展[RFC6520]
  • 应用层可发送空TACACS+包(不推荐)

连接超时:

  • 空闲超时:建议至少300秒
  • 握手超时:建议30秒
  • 读/写超时:建议60秒

错误处理:

  • TLS错误应记录详细日志
  • 连接失败时实施指数退避
  • 考虑故障转移到备用服务器