【エムティーエルエス】

mTLS(相互TLS認証) とは?

💡 名刺交換しないと会話すら始まらない、超慎重な認証プロトコル
📌 このページのポイント
mTLS(相互TLS認証)の仕組み クライアント 証明書を提示 サーバー 証明書を提示 クライアント証明書 サーバー証明書 通常のTLS サーバー → クライアント(片方向) サーバーだけが証明書を提示 mTLS サーバー ⇄ クライアント(双方向) 両方が証明書を提示
mTLSのイメージ
ひよこ ひよこ

mTLSって普通のTLSと何が違うの?

ペンギン先生 ペンギン先生

普通のTLSサーバーだけが「私はこういう者です」って証明書を見せるんだけど、mTLSではクライアント側も証明書を見せるんだよ。お店に入るとき、お店の営業許可証を確認するだけじゃなくて、お客さんも身分証を見せるイメージだね

ひよこ ひよこ

どうしてわざわざ両方で確認する必要があるの?

ペンギン先生 ペンギン先生

マイクロサービスのように、サービス同士が通信する場面では「このリクエストは本当に正規のサービスから来たのか」を確認しないと危険なんだよ。悪意のあるサービスがなりすましてデータを盗む可能性があるからね

ひよこ ひよこ

サービスメッシュでよく聞くけど、関係あるの?

ペンギン先生 ペンギン先生

IstioLinkerdなどのサービスメッシュは、サイドカープロキシがmTLSを自動的にやってくれるんだよ。アプリケーション側でTLSの実装を意識しなくても、通信が勝手に暗号化&相互認証されるのが大きなメリットだね

ひよこ ひよこ

証明書の管理って大変そうだよね?

ペンギン先生 ペンギン先生

そこが一番の課題だね。サービスが数百個あると証明書も数百枚必要になるし、有効期限の管理も大変だよ。だからSPIFFEという標準仕様を使って、証明書の自動発行・自動ローテーションを行うのが現代的なやり方なんだ

ひよこ ひよこ

SPIFFEって初めて聞いた!どんな仕組みなの?

ペンギン先生 ペンギン先生

SPIFFEはワークロードごとに一意のIDを割り当てて、短い有効期限の証明書を自動発行する仕組みだよ。証明書の寿命を数時間〜数日に短くすることで、万が一漏洩しても被害を最小限にできるんだ。Kubernetes環境ではSPIREという実装がよく使われているよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「mTLS」って出てきたら「お互いに証明書を見せ合って本人確認するTLS」と思えればだいたいOK!
📖 おまけ:英語の意味
「mutual Transport Layer Security」 = 相互トランスポート層セキュリティ
💬 mutualは「お互いの」という意味で、双方向の認証を表しているよ。通常のTLSに「m」が付くだけで、認証の方向が片方向から双方向になるんだよ
← 用語集にもどる