すべての SSL 記事 SSL と証明書

相互TLS(mTLS)とは?クライアント証明書認証

通常のHTTPSでは、サーバーのみが証明書でIDを証明します。クライアント(ブラウザ)は匿名です — サーバーは誰が接続しているかわかりません。

**相互TLS(mTLS)**は2番目のステップを追加します:クライアントも証明書を提示します。両側が互いを認証します。サーバーは信頼された認証局に対してクライアントの証明書を検証し、クライアントはサーバーの証明書を検証します — したがって「相互」です。

通常のTLS vs 相互TLS

通常のTLS相互TLS(mTLS)
サーバーがIDを証明✅ 証明書 + CA署名✅ 同じ
クライアントがIDを証明❌ 匿名✅ クライアント証明書
認証一方向(サーバーのみ)双方向(両方)
ユースケース公開Webサイト内部API、ゼロトラスト
クライアントに必要なものブラウザだけ証明書 + 秘密鍵
セットアップの複雑さ標準高い — クライアント証明書の管理が必要

mTLSを使用すべき場面

サービス間通信

ネットワーク上で互いに通信するマイクロサービス。mTLSは認可されたサービスのみが接続できることを保証します — URLを知っているだけの誰でもではなく。

Service A ←──mTLS──→ Service B
両方が検証: 「あなたは主張通りの人ですか?」

ゼロトラストアーキテクチャ

ゼロトラストでは、ネットワーク接続はデフォルトで信頼されません — 企業ネットワーク内部でも。mTLSはネットワークレベルの信頼(ファイアウォール、VPN)をIDレベルの信頼(証明書)に置き換えます。

APIセキュリティ

APIキーだけでなく、機密APIを保護します。盗まれたAPIキーは誰でも使用できます。クライアント証明書は特定の秘密鍵にバインドされています — 盗んで使用するのがより困難です。

IoTデバイス認証

製造時にプロビジョニングされたクライアント証明書でデバイスがバックエンドに接続します。サーバーは本物のデバイスと通信していることを知り、偽装されたものではないと確認できます。

mTLSの仕組み

  1. クライアントが接続し、TLSハンドシェイクを開始(通常のTLSと同じ)
  2. サーバーが証明書を送信 — クライアントが検証(通常のTLSと同じ)
  3. サーバーがクライアント証明書を要求CertificateRequestメッセージを送信
  4. クライアントが証明書を送信 — サーバーが信頼された認証局に対して検証
  5. 両側がセッション鍵を計算し、暗号化通信が開始

ステップ3〜4が「相互」にしている部分です。

NginxのmTLS設定

server {
    listen 443 ssl;
    server_name api.example.com;

    # Server certificate (same as regular HTTPS)
    ssl_certificate     /etc/ssl/server-fullchain.pem;
    ssl_certificate_key /etc/ssl/server-privkey.pem;

    # Client certificate verification
    ssl_client_certificate /etc/ssl/client-ca.pem;  # CA that signed client certs
    ssl_verify_client on;                            # Require client cert

    # Optional: pass client cert info to your app
    proxy_set_header X-Client-DN $ssl_client_s_dn;
    proxy_set_header X-Client-Verify $ssl_client_verify;
}

mTLS vs 他の認証方法

方法セキュリティレベル複雑さ最適な用途
APIキー低い(共有可能)低い公開API、レート制限
OAuth/JWT中程度中程度ユーザー向けAPI
mTLS高い(暗号バインド)高いサービス間通信、ゼロトラスト
mTLS + JWT最高高いトランスポートとアプリケーション両方の認証

mTLSとGetHTTPS

GetHTTPSサーバー証明書を発行します — WebサーバーがIDを証明するために使用する証明書です。これはすべてのHTTPS Webサイトが使用する標準的なSSL証明書です。

mTLS用のクライアント証明書は通常、Let’s Encryptのような公開認証局ではなく、プライベートCA(組織の内部認証局)によって発行されます。Let’s Encryptはクライアント証明書を発行しません — 公開ドメイン用のサーバー証明書のみを発行します。

よくある質問

mTLSにLet’s Encryptを使えますか?

サーバー証明書には:はい。クライアント証明書には:いいえ。クライアント証明書は、あなたが管理するプライベートCAによって発行される必要があります — どのクライアントが認可されるかを決定するためです。opensslcfsslstep-caなどのツールがプライベートCAとして機能できます。

mTLSは「クライアント証明書認証」と同じですか?

はい。「相互TLS」「mTLS」「双方向TLS」「クライアント証明書認証」はすべて同じことを指します — TLSハンドシェイク中に両側が証明書を提示することです。

mTLSはAPIキーを置き換えますか?

可能ですが、異なる目的を果たします。mTLSはトランスポートレベルのID(どのサービスが接続しているか)を証明します。APIキー/JWTはアプリケーションレベルのID(どのユーザー/権限か)を証明します。多くのシステムは多層防御のために両方を併用しています。

mTLSはどこで一般的に使われていますか?

Kubernetes(IstioやLinkerdによるサービスメッシュ)、Cloudflare Access、AWS API Gateway(相互TLS)、Google CloudのBeyondCorp、ほとんどのエンタープライズゼロトラスト実装で使用されています。

関連記事

SSL と証明書 2026-05-07
SSL/TLSの仕組み:TLSハンドシェイクの解説
TLSハンドシェイクのビジュアルウォークスルー。ブラウザとサーバーがミリ秒で暗号化接続を確立する方法を解説。TLS 1.2、TLS 1.3、セッション再開、前方秘匿性をカバーします。
SSL と証明書 2026-05-08
公開鍵暗号:SSL暗号化の実際の仕組み
公開鍵暗号は鍵ペア(公開鍵と秘密鍵)を使用してHTTPS接続を保護します。非対称暗号化、デジタル署名、鍵交換がSSL/TLSを可能にする仕組みを解説します。
SSL と証明書 2026-05-08
SSL証明書とは?
SSL証明書はWebサイトを認証し暗号化されたHTTPS接続を有効にするデジタルファイルです。証明書の中身、仕組み、無料での取得方法、すべてのサイトに必要な理由を解説します。
ブラウザで無料 SSL 証明書を取得
インストール不要、アカウント不要。秘密鍵は常にデバイスに残ります。
証明書を取得