【エムティーエルエス】

mTLS(相互TLS認証) とは?

最終更新:
💡 通信の両側を、証明書で認証する

TLSでサーバーだけでなくクライアントも証明書を使って認証する方式。秘密鍵の確認、認証と権限の違い、証明書管理とサービスメッシュの条件を解説します。

📌 このページのポイント
mTLS:証明書で通信の両側を認証クライアントサーバー相手を検証相手を検証サーバーのクライアント側の証明書 + 秘密鍵を持つことの証明認証局・名前・期限等を確認秘密鍵そのものは送らない相手の認証と、操作の許可は別
矢印は証明書等の認証情報を渡す方向で、TLS全メッセージの時系列ではありません。証明書の発行・更新、権限と適用範囲も管理します。
ひよこ ひよこ
mTLSは、普通のHTTPSと何が違う?
ペンギン先生 ペンギン先生
一般的な証明書を使うHTTPSでは、クライアントがサーバーを認証するよ。mTLSではサーバーもクライアントの証明書を求め、両側を認証する。TLSで通信を保護する仕組みに、クライアントの認証も加えるんだ。
ひよこ ひよこ
証明書をコピーして持てば、認証できる?
ペンギン先生 ペンギン先生
証明書は秘密そのものではないよ。TLSの証明書による認証では、対応する秘密鍵を持つことも署名で示す。受け取る側は、信頼する認証局や有効期限等も確認する。秘密鍵は、相手に送るためのものではないんだ。
ひよこ ひよこ
確認するのは、サービスを使う人?
ペンギン先生 ペンギン先生
証明書が表す相手によるよ。サービス間では、プログラムやワークロードの識別に使うことがある。それだけでアプリの利用者を認証したり、すべての操作を許可したりするわけではない。誰を表す証明書かと、権限を分けて考えよう。
ひよこ ひよこ
サービスメッシュなら、自動で全部mTLSになる?
ペンギン先生 ペンギン先生
鍵や証明書の発行・更新、通信の保護を支援するよ。ただし適用範囲や設定が大切。Istioには平文とmTLSの両方を受け付けるPERMISSIVEモードもある。導入しただけで全通信を必ず相互認証すると決め付けず、方針と実際の通信を確認しよう。
ひよこ ひよこ
運用では、何を管理する?
ペンギン先生 ペンギン先生
信頼する相手の範囲、証明書の名前と期限、秘密鍵、更新と失効などだよ。SPIFFEはワークロードのIDや認証用文書等の仕様で、SPIREはその実装の一つ。短い期限や自動更新だけで安全が完成するわけではなく、発行条件や権限の設計も必要なんだ。
もっと詳しく知りたい人へ

mTLSなら、パスワードやAPIトークンは全部不要?

何を認証するかによります。通信するサービスをmTLSで認証し、利用者の認証や操作の許可をアプリ側で別に行う構成もあります。認証済みの相手にも、必要な操作だけ許可する設計が必要です。

TLSは必ず証明書を使う?

ここでは証明書を使う一般的な方式を説明しています。TLSには事前共有鍵を使う方式等もあり、「普通のTLSは必ずサーバー証明書だけ」という定義にはしません。mTLSも具体的な方式と設定を確認します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「mTLS」って出てきたら「通信する両側を、証明書で確認するTLS」と思えばだいたいOK!
📖 おまけ:英語の意味
「mutual Transport Layer Security」 = 相互TLS認証
💬 mutualは相互の意味です。TLSでサーバー認証に加えてクライアント認証も行う使い方を表し、暗号化する通信の方向が変わるという意味ではありません。

参考資料

← 用語集にもどる