業務で必要になって調べたのでまとめる。
TLS認証の仕組み
TLSでは、サーバー側のみが、サーバー証明書によって「ドメインの所有権」と「通信相手の正当性」の2点を確認する。
🔧 準備フェーズ (サーバー側)
- サーバー側で鍵ペア (=
サーバーの公開鍵+サーバーの秘密鍵)を生成する - サーバー所有者が CA に
CSR(Certificate Signing Request) を提出する-
CSR=サーバーの公開鍵+その他の情報+サーバーの秘密鍵によるこれらの署名 - これにより、CA は「申請者が本当に
サーバーの秘密鍵を持っている」ことを確認できる
-
- サーバー所有者はサーバーに、CAに発行してもらった
サーバー証明書をインストールする-
サーバー証明書=サーバーの公開鍵+その他の情報+CAの秘密鍵による署名
-
🤝 通信フェーズ(TLS)
- 接続時にサーバーは
サーバー証明書をクライアント側に提示する - クライアントは、既にインストール済みの
信頼済みCAの公開鍵で、サーバー証明書の中のCAの秘密鍵による署名を検証する。成功したら、証明書の中のサーバーの公開鍵を信頼する- これに含め、「その証明書が接続先のドメイン名と一致確認」や、「有効期限のチェック」なども行う
- ハンドシェイク中にサーバーは「これまでのハンドシェイク内容(ランダム値など)」を
サーバーの秘密鍵で署名したものをクライアントに渡す - クライアントは先程信頼した
サーバーの公開鍵でこれを検証する。検証に成功したら、クライアントはこのサーバーを信頼する - クライアントとサーバーが鍵共有により各々共通の対称鍵を算出する。以降の通信内容はこれによる暗号化を行う
mTLS認証の仕組み
TLSでは、クライアントとサーバーのそれぞれがデジタル証明書を用いて自身の素性を証明する。
TLSでは、サーバーのみが身元証明を行なっていたが、クライアント側も同じことを行う。
- クライアント側の準備: サーバーと同様に、鍵ペアの発行と証明書の発行を行う必要がある
- サーバー側の検証: サーバー側にも信頼済みCAの公開鍵をインストールしておく必要がある