mTLS

クライアントとサーバーが互いに証明書を検証し、双方向で認証する TLS の拡張

セキュリティ認証

mTLS とは

mTLS (Mutual TLS) は、通常の TLS がサーバーの証明書のみを検証するのに対し、クライアントの証明書もサーバーが検証する双方向認証である。マイクロサービス間通信やゼロトラストアーキテクチャで使われる。

TLS vs mTLS

TLS (一方向):
  クライアント → サーバー証明書を検証 → 暗号化通信
  (サーバーはクライアントを検証しない)

mTLS (双方向):
  クライアント → サーバー証明書を検証
  サーバー → クライアント証明書を検証 → 暗号化通信
  (双方が相手を検証)
観点 TLS mTLS
サーバー認証
クライアント認証
用途 Web サイト、API マイクロサービス間、IoT
証明書管理 サーバーのみ サーバー + クライアント

ユースケース

ケース 理由
マイクロサービス間通信 サービス間の認証を証明書で行う
ゼロトラスト ネットワーク境界ではなく ID で認証
IoT デバイス デバイスの正当性を証明書で検証
B2B API パートナー企業のクライアントを証明書で認証

API Gateway に信頼する CA 証明書 (トラストストア) をアップロードし、クライアントはその CA が発行した証明書を提示する。

サービスメッシュでの mTLS

Istio や AWS App Mesh は、サイドカープロキシ (Envoy) が自動的に mTLS を処理する。アプリケーションコードの変更は不要。

Pod A [App][Envoy Proxy] ←mTLS→ [Envoy Proxy][App] Pod B

証明書の管理

証明書の管理には ACM Private CA (AWS のプライベート CA)、cert-manager (Kubernetes での自動発行・更新)、HashiCorp Vault (シークレット管理 + PKI) がある。

よくある課題

  • 証明書の有効期限切れで通信が突然止まる → 自動更新を設定
  • 証明書のローテーション中に一時的に接続エラーが発生 → 新旧両方の証明書を信頼する期間を設ける
  • デバッグが困難 → openssl s_client で証明書チェーンを確認

mTLS を扱う関連書籍も多い。

関連用語