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"
握手过程
-
客户端发起:
Client -> Server: ClientHello (含ALPN "tacacs") -
服务器响应:
Server -> Client: ServerHello, Certificate(可选), Finished -
完成握手:
Client -> Server: Finished -
开始TACACS+通信:
Client <-> Server: TACACS+ packets (加密)
2.3. 端口与服务 (Ports and Service)
标准端口
TACACS+ over TLS:
- TCP端口65000: IANA分配的官方端口
- 服务名称: "tacacss"(TACACS Secure)
传统TACACS+(明文或遗留加密):
- TCP端口49: 历史端口(不推荐用于新部署)
- 仅在无法升级的环境中使用
端口选择建议
-
新部署: 必须使用端口65000
-
迁移场景:
- 服务器同时监听端口49和65000
- 客户端优先尝试端口65000
- 逐步淘汰端口49
-
防火墙配置:
允许: 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错误应记录详细日志
- 连接失败时实施指数退避
- 考虑故障转移到备用服务器