TLSとmTLSの違いについて調べた話

アイキャッチ画像

背景について

以前、CloudFront経由の通信だけをAPI Gatewayで許可する方法について調査した際、アクセス元を制限する方法の1つとしてmTLS(Mutual TLS)を知りました。元の調査では、mTLSを利用することで、クライアント証明書を持つ通信だけを許可する方法を確認しました。

その中で、普段Webサイトなどで利用されているTLSとmTLSでは何が違うのか、また、なぜすべての通信でmTLSを利用するのではなく、TLSと使い分けるのか疑問に感じました。

そこで今回は、TLSとmTLSの仕組みの違いや、それぞれがどのような場面で利用されるのかについて整理します。

TLSとmTLSについて 

TLSとは 

TLSは、Webサイトなどで広く利用されている通信の暗号化技術です。

一般的なHTTPS通信では、クライアント側がサーバー証明書を確認し、接続しようとしているサーバーが正しい相手であることを確認します。

例えば、ブラウザからWebサイトへアクセスする場合、ブラウザ側がWebサイトの証明書を確認したうえで通信を行います。

このとき、サーバー側は通常、クライアント証明書を使って接続元を確認することまでは行いません。

そのため、TLSでは主に以下の2つを実現しています。

  • 通信内容を暗号化する
  • 接続先のサーバーが正しい相手か確認する

mTLSとは 

mTLSは「Mutual TLS」の略で、日本語では「相互TLS認証」などと呼ばれます。

通常のTLSではクライアント側がサーバー証明書を確認しますが、mTLSではそれに加えて、サーバー側もクライアント証明書を確認します

つまり、双方がお互いの証明書を確認してから通信を行います。

簡単に整理すると、

  • 一般的なTLS:主にクライアントがサーバーを確認する
  • mTLS:クライアントとサーバーがお互いを確認する

という違いがあります。

そのためmTLSは、一般公開されているWebサイトというよりも、特定のシステム同士のAPI通信や、許可されたクライアントだけにアクセスさせたい場合などで利用されます。

なぜすべてmTLSにしないのか

mTLSは相互に認証を行うため、通信相手をより厳密に確認できますが、その分、証明書の管理が増えます。

例えば、一般公開されているWebサイトでmTLSを使う場合、アクセスするすべての利用者にクライアント証明書を配布し、それを管理する必要があります。

利用者が数人であれば管理できるかもしれませんが、不特定多数がアクセスするサービスでは、証明書の発行や配布、更新、失効などの管理が必要になり、運用の負担が大きくなります。

そのため、一般的なWebサイトではTLSを利用し、利用者の認証についてはIDやパスワードなど、別の仕組みを利用することが一般的です。

一方で、

  • システム間のAPI通信
  • 社内システム
  • 接続元を限定したいAPI
  • 特定の端末やサービスだけに通信を許可したい場合

など、通信する相手があらかじめ分かっている場合はmTLSを利用しやすくなります。

TLSとmTLSをどう使い分けるか

簡単に整理すると、不特定多数のユーザーがアクセスする一般的なWebサイトではTLSが利用されることが多く、通信する相手を限定したいシステム間通信などではmTLSが選択肢になります。

  • 不特定多数のユーザーがアクセスする場合 → TLS
  • 許可した特定の相手だけ通信させたい場合 → mTLS

mTLSではクライアント側の証明書も確認できるため、通信相手をより厳密に制限できます。

一方で、クライアント証明書の発行・配布・更新・失効などの管理が必要になるため、その分運用の負担も増えます。

そのため、「mTLSの方が安全だからすべてmTLSにする」という考え方ではなく、誰がアクセスするのか、どこまで通信相手を確認する必要があるのか、証明書を管理できるのかといった要件に応じて使い分けることが大切です。

まとめ

TLSとmTLSは、どちらも通信を安全に行うための仕組みですが、認証する対象に違いがあります。

一般的なTLSでは主にクライアント側がサーバーの証明書を確認しますが、mTLSではサーバー側もクライアントの証明書を確認します。

mTLSを利用すれば通信相手をより厳密に確認できますが、その分クライアント証明書の発行や更新、管理が必要になります。

そのため、すべての通信をmTLSにすればよいというわけではなく、一般公開するWebサービスではTLS、通信相手を限定したいシステム間通信などではmTLSというように、用途に応じて使い分けることが重要だと感じました。