見えるセキュリティ
TLSの相互認証(mTLS)
MUTUAL TLS
この概念とは?
TLSの相互認証(mTLS)は、ClientとServerが、証明書と署名でお互いを確かめる方法です。Serverだけを証明書で確認する場合に加えて、Serverも接続してきたClientを確認します。
証明書は相手へ送りますが、秘密鍵は送りません。証明書に対応する秘密鍵を使って署名し、その鍵を使えることを相手に示します。今回はTLS 1.3の例で、この流れを見てみましょう。
- THEME
- crypto
- KIND
- protocol
- REVIEW
- self-reviewed ·
ClientとServerが、互いの証明書と署名を確認する流れ
双方の証明書と、信頼する発行元などの設定は準備済みとします。この例ではServerがClientの証明書認証を必須にしています。
- ClientHelloClientからServerへ
通信方式の候補・今回の鍵共有用の公開値Client証明書はまだ送らない。双方の証明書・署名鍵・信頼設定は準備済み。
STEP 1 まで表示しています。続きは「次へ」で追加します。
- Clientから送る
- Serverから送る
- 端点内の処理には通信矢印を付けない
縦の間隔・動く速さは実際の処理時間ではありません。STEPは学習上の区切りで、パケット数や往復数とは別です。
STEP 01 / 7
Clientが接続を始める
STEP 1 / 7: Clientが接続を始める
Clientは、安全な通信を始めるための挨拶を送ります。通信に使う方式の候補と、今回の鍵共有に使う公開情報を伝えます。
このSTEPで押さえること
署名用秘密鍵と、今回の鍵共有の一時秘密値は別の値です。秘密は端点内に保ち、相手には公開情報を送ります。
技術的な詳細を見る
TCP接続後の、新しいTLS 1.3フルハンドシェイクを扱います。今回はECDHEで接続ごとの共有秘密を準備し、双方の証明書で認証します。証明書の署名用秘密鍵と、ECDHEの一時秘密値は別の値です。ClientHelloには通信方式の候補とkey_shareの公開値を含めます。Client証明書はまだ送りません。 双方の証明書・対応する署名用秘密鍵・信頼設定は事前に準備済みです。ClientとServerが同じCAや公開Web向けCAを使うことは必須ではありません。証明書の発行・配布・更新やCAの階層は図では省略します。 mTLSの考え方はTLS 1.2にもありますが、この図はTLS 1.3の例です。TLS 1.2の手順、PSK再開、0-RTT、HRR、接続後認証、QUIC、証明書圧縮は扱いません。ClientとServerはここで描くTLS接続の端点とし、プロキシによるTLS終端や認証情報の転送も省略します。
この概念の要点
要点
ServerもClientを確かめる
mTLSでは、ClientがServerを確認するだけでなく、ServerもClientの証明書と署名を確認します。自分を示す側と相手を確認する側を、双方が担当します。
要点
証明書と署名には別の役割がある
証明書は公開鍵と識別情報を伝えます。その公開鍵に対応する秘密鍵を使えることは、接続時の署名で示します。証明書のコピーを持っているだけでは、この署名を作れることにはなりません。
注意
信頼の設定と鍵の管理が必要
どの発行元を信頼するかを設定し、証明書の有効期間や用途などを確認します。Client側にも証明書の配布・更新や秘密鍵の保護が必要です。証明書を交換するだけで安全になるわけではありません。
要点
認証と認可は別
認証は相手を確かめること、認可は何を許すかを決めることです。mTLSで確認できたClientにも、許可された情報や操作の範囲があります。
理解確認
参考資料
- RFCThe Transport Layer Security (TLS) Protocol Version 1.3
RFC 9846IETF · TLS 1.3の手順・証明書認証・鍵(2、4.4.2、4.5、7.1、7.3節)
- RFCExample Handshake Traces for TLS 1.3
RFC 8448IETF · Client認証を含む通信例(6節)。規範上の要件はRFC 9846を参照
- RFCInternet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
RFC 5280IETF · 証明書の用途・検証・失効情報(4.2.1.12、6.1節)
- RFCService Identity in TLS
RFC 9525IETF · Serverの識別と接続先名の照合。Client識別は対象外(1.4.2、6節)
- RFCOAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens
RFC 8705IETF · OAuthでのClient識別の具体例。すべてのmTLSへ一般化しない(2.1節)
- NISTNIST CSRC Glossary — authorization
NIST · 操作やアクセスを許可・拒否する認可の定義
- RFCThe Transport Layer Security (TLS) Protocol Version 1.2
RFC 5246IETF · TLS 1.2にもClient証明書要求があることを確認(7.4.4節)