RFC 9887 - 技術サマリー (日本語版)
文書: Terminal Access Controller Access-Control System Plus (TACACS+) over TLS 1.3
RFC 番号: 9887
公開日: 2025年12月
ステータス: PROPOSED STANDARD
更新: RFC 8907
クイックリファレンスカード
重要要件 (MUST)
| 要件 | 仕様 | 節 |
|---|---|---|
| TLS バージョン | TLS 1.3 以上 | 3.2 |
| ポート番号 | TLS 用 TCP 300 | 3.1, 7 |
| Authentication | 相互 (クライアント + サーバー) | 3.1 |
| 証明書検証 | 完全パス + 失効確認 | 3.4.1 |
| 難読化 (Obfuscation) | TLS と併用してはならない (MUST NOT) | 4 |
| Unencrypted フラグ | 1 に設定しなければならない (MUST) | 4 |
| 0-RTT データ | 送信してはならない (MUST NOT) | 5.1.2 |
| フォールバック | 非 TLS へしてはならない (MUST NOT) | 5.1.1 |
サポートされる Authentication 方式
-
証明書ベース (MANDATORY)
- 完全チェーン検証付き X.509 証明書
- 失効確認が必須
- サーバー身元: DNS-ID, IP-ID, または SRV-ID
- SNI 拡張のサポートが必須
-
事前共有鍵 (PSK) (OPTIONAL)
- 外部 PSK (再開用 PSK ではない)
- 最小 16 オクテット
- 難読化用共有秘密と異なっていなければならない (MUST)
-
生公開鍵 (RPK) (OPTIONAL)
- 本書の対象外
- 詳細は RFC 7250 を参照
ポート割り当て
| サービス | ポート | プロトコル | 用途 |
|---|---|---|---|
| TACACS+ (レガシー) | 49 | TCP | 非 TLS 接続 |
| TACACS+ over TLS | 300 | TCP | TLS 1.3 以上の接続 |
IANA 登録: ポート 300/TCP 上のサービス名 "tacacss"
TLS 構成要件
必須暗号スイート
- TLS 1.3 必須スイート (RFC 8446 第 9.1 節)
- 運用者が設定可能であるべき (SHOULD)
証明書要件
- パス検証: RFC 5280 第 6 節
- 身元検証: RFC 9525
- 失効: 初回接続時および再開時に確認必須
- SNI: サポート必須 (RFC 6066 第 3 節)
禁止機能
- ❌ TLS 1.3 未満のバージョン
- ❌ 0-RTT early data
- ❌ 非 TLS からのアップグレード
- ❌ MD5 ベースの難読化
- ❌ 非 TLS へのフォールバック
接続ライフサイクル
クライアント サーバー
| |
|--- ポート 300 へ TCP 接続 -------------->|
| |
|<-- TLS 1.3 ハンドシェイク (相互 Authentication) -->|
| |
|--- TACACS+ データ (TLS アプリデータ) --->|
|<-- TACACS+ 応答 ------------------------|
| |
|--- クローズ (セッション終了またはタイムアウト後) -->|
接続モード
-
シングル接続モード (RFC 8907 第 4.3 節)
- 1 本の TLS 接続上で複数の TACACS+ セッション
- 非アクティブタイムアウトの対象
- 接続は短時間維持され得る
-
非シングル接続モード
- TLS 接続あたり 1 つの TACACS+ セッション
- セッション完了後に TCP を閉じる
TLS 再開 (Resumption)
- チケット有効期間: 設定可能であるべき (0 秒を含む)
- 単回使用: 各チケットは再開 1 回のみ
- 失効確認: 再開期間中も必須
- サーバー動作: チケットが有効かつ未使用なら許可すべき (SHOULD)
セキュリティ考慮事項の要約
対処する脅威モデル
| 脅威 | 緩和策 |
|---|---|
| 盗聴 | TLS 1.3 暗号化 |
| 中間者 (Man-in-the-Middle) | 相互 Authentication |
| リプレイ攻撃 | 0-RTT なし、nonce 機構 |
| ダウングレード攻撃 | ポート分離、フォールバックなし |
| 弱い暗号 | MD5 廃止、TLS 1.3 のみ |
運用上のセキュリティ
-
TLS と非 TLS の分離
- RECOMMENDED: 物理ホストを分ける
- MUST: ポート番号を分ける
- 誤設定による露出を防ぐ
-
証明書管理
- BCP 195 (RFC 7525) に従う
- ワイルドカード証明書: 専用サブドメインに限定
- CA 到達性: ネットワーク分離時の計画
-
設定の明確さ
- TLS / 非 TLS モードを明示的に示す
- ポート不一致に対する検証警告
- 設定セクションを分離
移行戦略 (5 フェーズ)
フェーズ 1: 評価
- 全 TACACS+ クライアントとサーバーを棚卸し
- TLS 対応機器とレガシー機器を識別
- ネットワークトポロジ変更を計画
フェーズ 2: パイロット
- テスト環境でポート 300 に TLS サーバーを配置
- テストクライアントを設定
- 証明書基盤を検証
フェーズ 3: 初期本番展開
- 本番クライアントの一部を移行
- 問題を監視
- 非 TLS 基盤を並行維持
フェーズ 4: 段階的ロールアウト
- 残りクライアントを段階的に移行
- レガシー機器の例外を文書化
- 非 TLS に対する補償的統制を実装
フェーズ 5: 完了
- 非 TLS 基盤を廃止
- 最終セキュリティ監査
- 文書を更新
重要ルール: TLS が失敗した場合、クライアントは非 TLS にフォールバックしてはならない (MUST NOT)
実装チェックリスト
サーバー実装
- TLS 1.3 サポート (最低要件)
- ポート 300 で待受 (または設定された代替)
- 証明書ベースの相互 Authentication
- 証明書パス検証 (RFC 5280)
- 失効確認
- SNI 拡張のサポート
- TAC_PLUS_UNENCRYPTED_FLAG なしパケットの拒否
- 0-RTT データの拒否
- TLS 再開のサポート
- 設定可能なチケット有効期間
- 任意: PSK Authentication
- 任意: Raw Public Keys
クライアント実装
- TLS 1.3 サポート (最低要件)
- ポート 300 へ接続 (または設定値)
- 即時 TLS ネゴシエーション (アップグレードなし)
- 証明書検証
- ClientHello に SNI 拡張
- TAC_PLUS_UNENCRYPTED_FLAG = 1 を設定
- 0-RTT データの送信なし
- 非 TLS へのフォールバックなし
- TLS 再開のサポート
- 任意: PSK Authentication
- 任意: Raw Public Keys
参照実装メモ
証明書身元検証
許容される識別子タイプ:
- DNS-ID: tacacs.example.com
- IP-ID: 192.0.2.1 または 2001:db8::1
- SRV-ID: _tacacs._tcp.example.com
許容されない:
- URI-ID (TACACS+ では使用しない)
ワイルドカード証明書
✅ 良: *.tacacs.example.com (専用サブドメイン)
❌ 悪: *.example.com (範囲が広すぎる)
PSK 身元フォーマット
- 最小長: 16 オクテット
- RFC 9257 第 6.1 節に従う
- 難読化用秘密とは異なっていなければならない
運用上のベストプラクティス
-
監視
- 全 TLS ハンドシェイク失敗をログ
- ポート 300 への非 TLS 接続試行でアラート
- 証明書有効期限を追跡
-
証明書ライフサイクル
- 更新の自動化 (例: ACME プロトコル)
- 証明書チェーンをローカルに保持
- CA 停止時の計画
-
テスト
- TLS 設定の定期監査
- 暗号スイート互換性テスト
- フェイルオーバー検証
-
文書化
- TLS / 非 TLS サーバーの棚卸しを維持
- 移行タイムラインを文書化
- 証明書トラストアンカーを記録
適合要件
FIPS 140-3
- 承認済み暗号スイートによる TLS 1.3
- MD5 難読化は廃止 (非適合)
- 証明書ベースの Authentication を推奨
業界標準
- PCI DSS: 強力な暗号が必須
- NIST SP 800-52: TLS ガイドライン
- BCP 195: TLS ベストプラクティス
避けるべきよくある落とし穴
- ❌ ポート不一致: TLS クライアントがポート 49 に接続
- ❌ フォールバック論理: TLS 失敗後に非 TLS を試行
- ❌ 秘密の混同: 難読化と PSK に同一鍵を使用
- ❌ 0-RTT 有効: early data の送信
- ❌ 証明書検証の無効化: 無効な証明書を受け入れる
- ❌ 同一ホスト: 同一サーバーで TLS と非 TLS を運用
- ❌ ワイルドカードの乱用: 全サービスに *.example.com
- ❌ 失効確認なし: CRL/OCSP 検証を省略
パフォーマンス考慮事項
TLS ハンドシェイクのオーバーヘッド
- フルハンドシェイク: 約 2 RTT (TLS 1.3)
- 再開: 約 1 RTT
- 緩和: 繰り返し接続では再開を利用
接続の持続
- シングル接続モードはハンドシェイク頻度を下げる
- 接続再利用とタイムアウト設定のバランス
- 典型的なタイムアウト: 60〜300 秒
証明書検証
- 検証済み証明書をキャッシュ
- 遅延削減に OCSP stapling を利用
- TLS Cached Information Extension (RFC 7924) を検討
トラブルシューティングガイド
| 症状 | 想定原因 | 対処 |
|---|---|---|
| Connection refused | ポート誤り | クライアントがポート 300 用に設定されているか確認 |
| Handshake failure | TLS バージョン不一致 | TLS 1.3 サポートを確認 |
| Certificate error | 無効な証明書チェーン | CA トラストと証明書の有効性を確認 |
| Authentication failed | 相互 Authentication の問題 | クライアント・サーバー双方の証明書を確認 |
| TAC_PLUS_UNENCRYPTED_FLAG error | フラグ未設定 | クライアントがフラグを 1 に設定しているか確認 |
| Resumption rejected | チケット期限切れ/使用済み | 正常; フルハンドシェイクに進む |
将来の検討事項
YANG データモデル
- 標準化された設定モデルが必要
- 自動化と一貫性に資する
- TLS 固有パラメータを含めるべき
プロトコル拡張
- 本書は TLS 1.3 に焦点
- 将来の TLS バージョンも動作すると期待
- IETF TLS WG の更新を監視
IPv6 展開
- IPv6 に関する推奨の変更なし
- TLS は IPv4 と IPv6 で同一に動作
- IP ベース証明書身元には IP-ID を使用
クイック意思決定ツリー
TACACS+ のセキュリティが必要か?
├─ YES → TLS を使用 (本 RFC)
│ ├─ 現行機器 → 証明書ベースの Authentication
│ ├─ 制約付き機器 → PSK を検討
│ └─ レガシー機器 → 非 TLS 基盤を分離
│
└─ NO → TACACS+ が適切か再検討
└─ 高セキュリティ環境では TLS が必須
関連 RFC
- RFC 8907: ベース TACACS+ プロトコル (本 RFC により更新)
- RFC 8446: TLS 1.3 (トランスポート層)
- RFC 5280: X.509 PKI (証明書)
- RFC 9525: TLS におけるサービス身元 (身元検証)
- RFC 9257: 外部 PSK ガイダンス
- RFC 7525 (BCP 195): TLS ベストプラクティス
文書ステータス
- 標準トラック: Yes
- 実装の要否: 新規展開向け
- 後方互換性: 移行期間中の並行運用
- 廃止: MD5 難読化機構のみ
- 更新: RFC 8907 (TLS プロファイルを追加)
最終更新: 2025年12月26日
文書バージョン: 1.0 (英語版完全版に基づく日本語訳)
Maintained By: RFC Translation Project