TLS相互認証(mTLS)とは、APIのmTLSを実装する
mTLSは、クライアントとサーバーの両方が証明書を使って相手を認証することで、通信を暗号化しセキュアにする認証方式です。本文ではTLS相互認証の定義、仕組みなどの基本情報を説明した上、mTLSを利用したAPIにリクエストを送信してレスポンスを取得する方法を皆さんに紹介します。
mTLSは、クライアントとサーバーの両方が証明書を使って相手を認証することで、通信を暗号化しセキュアにする認証方式です。クライアントとサーバー両方の証明書の認証が完了する場合のみ、暗号化された接続が成り立ちます。mTLSを利用したAPIに接続するために、クライアント証明書を添付してリクエストを送信する必要があります。本文ではTLS相互認証の定義、仕組みなどの基本情報を説明した上、mTLSを利用したAPIにリクエストを送信してレスポンスを取得する方法を皆さんに紹介します。
mTLSとは
mTLS とは Mutual Transport Layer Security (相互トランスポート層セキュリティ)の略称で、クライアントとサーバーの両方が証明書を使って相手を認証することで、通信を暗号化しセキュアにする認証方式のことを指します。
mTLSの特徴といえば、主に次ようになります:
- クライアントはサーバーの証明書を検証することで、サーバーの身元を確認できる
- サーバーはクライアントの証明書を検証することで、クライアントの身元を確認できる
- 両者が相手の身元を確認した上で通信を開始するため、なりすましを防ぐことができる
- 通信内容は暗号化されるため、傍受や改ざんが困難
mTLSでは、クライアントとサーバーが相互に証明書を検証することで、なりすましなどを防ぐことができるので、機密性の高い通信を必要とするシステム等でよく利用されています。特に金融系のアプリケーションやクラウドサービスの内部通信などでの採用が進んでいます。
mTLSとTLSとの違い
よく耳にしたTLSと比べてみると、mTLSの違いは何ですか?mTLSとTLSとの相違点といえば、以下の5つの方面にまとめることができます。
認証の方向性が違う:TLSはサーバー認証のみを行い、mTLSはサーバーとクライアント両方の相互認証を行う必要があります。
証明書の必要性が違う:TLSはサーバー側の証明書のみが必要となりますが、mTLSはサーバーとクライアント両方の証明書が必要となります。
セキュリティの水準が違う:TLSはサーバー認証でMan-in-the-middle (中間者)攻撃の可能性ありますが、mTLSは相互認証プロセスにより、なりすましが難しくなります。
運用の負担が違う:TLSはサーバー証明書のみ発行・管理すればよいのですが、mTLSはクライアント証明書もちゃんと管理する必要があります。
互換性が違う:TLSはほぼ全ての環境で利用することができますが、mTLSはクライアント証明書の管理が難しい場合もあって、互換性がやや低いのです。
要するに、mTLSはTLSよりもセキュリティレベルが高い反面、運用の負担が大きく、すべてのシステムでの採用は難しい特徴があります。
mTLSの仕組み
それでは、mTLS動作のプロセスはどのようになりますか?次は、mTLSの仕組みを皆さんに紹介していきたいと思います。
- クライアントとサーバーはそれぞれ公開鍵証明書と秘密鍵を作成する。
- クライアントはサーバーの証明書を検証し、サーバーの身元を確認する。
- サーバーはクライアントの証明書を検証し、クライアントの身元を確認する。
- クライアントはサーバーの公開鍵を使って、ランダムなプリマスターキーを暗号化する。
- サーバーは秘密鍵を使ってプリマスターキーを復号化する。
- クライアントとサーバーはプリマスターキーを使ってセッションキーを生成する。
- セッションキーで通信内容を暗号化し、SSL/TLSを利用して秘密通信を開始する。
- セッションが終了すると、プリマスターキーやセッションキーは破棄される。
画像の参照元:https://dev.classmethod.jp/articles/eetann-learn-mtls/
このように、証明書による相互認証が行われた上で、セッションキーによる通信内容の暗号化が実現されます。これにより、mTLSは高いセキュリティを提供します。
mTLSを利用したAPIについて
mTLSを利用したAPIでは、相互認証を行うために、クライアント証明書をリクエストする時に添付する必要があります。その理由といえば、次のようなものがあります:
- サーバーがクライアントの身元を確認するために、クライアント証明書が必要
- クライアント証明書によってクライアント認証を実行できる
- クライアント証明書の公開鍵で送信するデータを暗号化できる
クライアント証明書を添付せずにmTLSを利用したAPIにリクエストを送信した場合、サーバーはクライアントを認証できないため、リクエストが拒否され、TLS接続自体が確立できなくなります。
mTLSを利用したAPIにリクエストを送信してレスポンスを取得する方法
それでは、mTLSを利用したAPIからレスポンスを取得したい場合は、どうしたらいいですか?次は、簡単にクライアント証明書を添付して、APIリクエストを送信してレスポンスを取得する方法を皆さんに紹介します。
Apidogは、非常に強力のAPI管理ツールとして、CA証明書かクライアント証明書を簡単に追加して、リクエストの送信時に相互認証を行えます。それでは、mTLSを利用したAPIにリクエストを送信したい場合は、次の操作手順を参照して、クライアント証明書をApidogに追加しましょう。
ステップ⒈Apidogを立ち上げ、mTLSを利用したAPIを開きます。
ステップ⒉「設計」モードに切り替え、上部のメニューバーで「変更」タブを選択して、Requestパラメータで「設定」をクリックします。
ステップ⒊「証明書の管理」をクリックします。
①CA証明書をオンにして、PEMファイルをアップロードします。
②「クライアント証明書を追加」をクリックして、必要な設定を終えます。