メインコンテンツまでスキップ

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 3003.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 方式

  1. 証明書ベース (MANDATORY)

    • 完全チェーン検証付き X.509 証明書
    • 失効確認が必須
    • サーバー身元: DNS-ID, IP-ID, または SRV-ID
    • SNI 拡張のサポートが必須
  2. 事前共有鍵 (PSK) (OPTIONAL)

    • 外部 PSK (再開用 PSK ではない)
    • 最小 16 オクテット
    • 難読化用共有秘密と異なっていなければならない (MUST)
  3. 生公開鍵 (RPK) (OPTIONAL)

    • 本書の対象外
    • 詳細は RFC 7250 を参照

ポート割り当て

サービスポートプロトコル用途
TACACS+ (レガシー)49TCP非 TLS 接続
TACACS+ over TLS300TCPTLS 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+ 応答 ------------------------|
| |
|--- クローズ (セッション終了またはタイムアウト後) -->|

接続モード

  1. シングル接続モード (RFC 8907 第 4.3 節)

    • 1 本の TLS 接続上で複数の TACACS+ セッション
    • 非アクティブタイムアウトの対象
    • 接続は短時間維持され得る
  2. 非シングル接続モード

    • TLS 接続あたり 1 つの TACACS+ セッション
    • セッション完了後に TCP を閉じる

TLS 再開 (Resumption)

  • チケット有効期間: 設定可能であるべき (0 秒を含む)
  • 単回使用: 各チケットは再開 1 回のみ
  • 失効確認: 再開期間中も必須
  • サーバー動作: チケットが有効かつ未使用なら許可すべき (SHOULD)

セキュリティ考慮事項の要約

対処する脅威モデル

脅威緩和策
盗聴TLS 1.3 暗号化
中間者 (Man-in-the-Middle)相互 Authentication
リプレイ攻撃0-RTT なし、nonce 機構
ダウングレード攻撃ポート分離、フォールバックなし
弱い暗号MD5 廃止、TLS 1.3 のみ

運用上のセキュリティ

  1. TLS と非 TLS の分離

    • RECOMMENDED: 物理ホストを分ける
    • MUST: ポート番号を分ける
    • 誤設定による露出を防ぐ
  2. 証明書管理

    • BCP 195 (RFC 7525) に従う
    • ワイルドカード証明書: 専用サブドメインに限定
    • CA 到達性: ネットワーク分離時の計画
  3. 設定の明確さ

    • 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 節に従う
- 難読化用秘密とは異なっていなければならない

運用上のベストプラクティス

  1. 監視

    • 全 TLS ハンドシェイク失敗をログ
    • ポート 300 への非 TLS 接続試行でアラート
    • 証明書有効期限を追跡
  2. 証明書ライフサイクル

    • 更新の自動化 (例: ACME プロトコル)
    • 証明書チェーンをローカルに保持
    • CA 停止時の計画
  3. テスト

    • TLS 設定の定期監査
    • 暗号スイート互換性テスト
    • フェイルオーバー検証
  4. 文書化

    • TLS / 非 TLS サーバーの棚卸しを維持
    • 移行タイムラインを文書化
    • 証明書トラストアンカーを記録

適合要件

FIPS 140-3

  • 承認済み暗号スイートによる TLS 1.3
  • MD5 難読化は廃止 (非適合)
  • 証明書ベースの Authentication を推奨

業界標準

  • PCI DSS: 強力な暗号が必須
  • NIST SP 800-52: TLS ガイドライン
  • BCP 195: TLS ベストプラクティス

避けるべきよくある落とし穴

  1. ポート不一致: TLS クライアントがポート 49 に接続
  2. フォールバック論理: TLS 失敗後に非 TLS を試行
  3. 秘密の混同: 難読化と PSK に同一鍵を使用
  4. 0-RTT 有効: early data の送信
  5. 証明書検証の無効化: 無効な証明書を受け入れる
  6. 同一ホスト: 同一サーバーで TLS と非 TLS を運用
  7. ワイルドカードの乱用: 全サービスに *.example.com
  8. 失効確認なし: CRL/OCSP 検証を省略

パフォーマンス考慮事項

TLS ハンドシェイクのオーバーヘッド

  • フルハンドシェイク: 約 2 RTT (TLS 1.3)
  • 再開: 約 1 RTT
  • 緩和: 繰り返し接続では再開を利用

接続の持続

  • シングル接続モードはハンドシェイク頻度を下げる
  • 接続再利用とタイムアウト設定のバランス
  • 典型的なタイムアウト: 60〜300 秒

証明書検証

  • 検証済み証明書をキャッシュ
  • 遅延削減に OCSP stapling を利用
  • TLS Cached Information Extension (RFC 7924) を検討

トラブルシューティングガイド

症状想定原因対処
Connection refusedポート誤りクライアントがポート 300 用に設定されているか確認
Handshake failureTLS バージョン不一致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