すべてのプロダクト
Search
ドキュメントセンター

Server Load Balancer:HTTPS リスナーで相互認証を設定する

最終更新日:Nov 12, 2025

クライアントのみがサーバーの ID を検証する一方向認証は、金融取引、医療、銀行、オンライン決済のシナリオにおけるセキュリティ要件を満たすことができません。サーバーは接続するすべてのクライアントを信頼するため、中間者攻撃や不正アクセスのリスクが発生します。Application Load Balancer (ALB) は、HTTPS リスナーでの相互認証を有効にします。相互認証では、クライアントとサーバーの両方が、データ送信のための安全な接続を確立する前に、互いの ID を検証する必要があります。

相互認証の概要

相互認証が必要な理由

ほとんどのインターネット Web アプリケーションは、さまざまなクライアントからのアクセスを歓迎します。これらのアプリケーションでは、一方向の HTTPS 認証のみが必要です。クライアントは、アプリケーションと対話する前にサーバー ID を検証し、有効なサーバーに接続していることを確認します。

ただし、より高いレベルのセキュリティが必要なシナリオでは、サーバー ID の検証だけでなく、クライアント認証も必要です。この場合、相互認証が役立ちます。これにより、承認されたクライアントのみがサーバーにアクセスできるようになり、中間者攻撃や不正アクセスなどのセキュリティリスクが軽減されます。

一方向認証と相互認証の比較

比較項目

一方向認証

相互認証

関連する証明書ファイル

サーバー証明書:

  • 公開鍵証明書

  • 秘密鍵

  • サーバー証明書:

    • 公開鍵証明書

    • 秘密鍵

  • クライアント証明書:

    • 公開鍵証明書

    • 秘密鍵

  • ルート CA 証明書

ハンドシェイクプロセス

image

image

利用シナリオ

金融取引、ヘルスケア、銀行、オンライン決済など、高いセキュリティ要件を持つビジネスでは、クライアント側がサーバーの ID を検証する必要があるだけでなく、サーバーもクライアントを認証する必要があります。

クライアント認証が必要ない場合、相互認証は不要です。

制限事項

  • Standard Edition および WAF-Enhanced Edition の ALB インスタンスのみが相互認証をサポートします。Basic Edition の ALB インスタンスはこの機能をサポートしていません。

  • HTTPS リスナーのみが相互認証をサポートします。QUIC リスナーと HTTP リスナーはこの機能をサポートしていません。

シナリオ例

ある企業が、顧客向けのオンライン取引プラットフォームをデプロイしました。当初、このプラットフォームではデータ送信に一方向の HTTPS 認証のみを使用していましたが、一部の不正なデバイスがシステムにアクセスしようとしていることが判明し、データ漏洩や取引改ざんのリスクが生じました。さらに、ビジネスの成長に伴い、プラットフォームはトラフィックの急増時にパフォーマンスの課題に直面するようになりました。

これらの問題を解決するため、同社は Alibaba Cloud ALB をデプロイし、ALB サービスで相互認証を有効にすることを決定しました。

  • ALB の負荷分散機能により、クライアントリクエストをバックエンドサーバーに効率的に分散させ、高い同時実行性シナリオでも安定したパフォーマンスと高速な応答時間を確保できます。

  • ALB で相互認証を有効にすることで、プラットフォームにアクセスするすべてのクライアントは、プラットフォームとの接続を確立するために有効なクライアント証明書を提供する必要があり、不正なデバイスがシステムにアクセスするのを効果的にブロックし、データ漏洩や取引改ざんのリスクを大幅に削減します。

image

前提条件

  • Certificate Management Service にサーバー証明書を 購入 するか、アップロード していること。

    この例では、証明書が購入されます。

    説明

    SSL 証明書を購入するには、有効なカスタムドメイン名が必要です。

  • Certificate Management Service コンソールで中間 CA 証明書が 購入 されており、少なくとも 1 つのプライベート中間 CA 証明書が利用可能であること。または、自己署名ルート CA 証明書または中間 CA 証明書が Certificate Management Service に アップロード されていること。

  • VPC (VPC) (このガイドでは VPC1 という名前) を作成し、VPC1 に 2 つの Elastic Compute Service (ECS) インスタンス (このガイドではそれぞれ ECS01 と ECS02 という名前) を作成し、両方の ECS インスタンスにアプリケーションをデプロイしていること。

    このガイドでは、ECS インスタンスで Alibaba Cloud Linux 3 オペレーティングシステムが使用され、NGINX を使用して HTTPS サービスが設定されます。

    クリックして ECS01 にテストサービスをデプロイするためのサンプルコマンドを表示

    1. 次のコマンドを使用して NGINX をインストールし、テストアプリケーションをデプロイします:

      yum install -y nginx
      cd /usr/share/nginx/html/
      echo "Hello World ! This is ECS01." > index.html
    2. ALB が HTTPS プロトコルを使用してバックエンドサーバーと通信するようにしたい場合は、サーバー証明書ファイルを ECS01 にアップロードし、NGINX 設定ファイル nginx.conf で HTTPS サービスモジュールを設定し、証明書ファイルのパスを指定してから、保存して終了してください。

      vim /etc/nginx/nginx.conf

      設定コマンドの例:

      http {
          ...
          # 既存の設定
          
          # HTTPS サービスモジュール
          server {
            listen       443 ssl;
            server_name  _;
            root         /usr/share/nginx/html;
      
              # サーバー証明書ファイルパスに置き換えます
              ssl_certificate "/etc/pki/nginx/server.crt";
              # サーバー証明書の秘密鍵パスに置き換えます
              ssl_certificate_key "/etc/pki/nginx/private/server.key";
              
              ...
          }
      }
    3. 次のコマンドを使用して NGINX サービスを再起動します:

      systemctl restart nginx.service
  • Standard または WAF-enabled エディションの ALB インスタンスを作成 していること。

  • サーバーグループを作成 し、ECS01 と ECS02 をバックエンドサーバーとしてサーバーグループに追加していること。

    ALB が HTTPS プロトコルを使用してバックエンドサーバーと通信するようにしたい場合は、サーバーグループの作成時にバックエンドプロトコルとして HTTPS を選択し、バックエンドサーバーに HTTPS サービスがデプロイされていることを確認してください。

手順

ステップ 1: クライアント証明書をデプロイする

クライアント (ユーザー) 側では、クライアント証明書を準備してエクスポートする必要があります。

このガイドでは、CA 証明書を取得する 2 つの方法を紹介します。Certificate Management Service を通じて CA 証明書を 購入 してクライアント証明書を申請するか、自己署名 CA 証明書を Certificate Management Service に アップロード することができます。

1. クライアント証明書を準備する

オプション 1: クライアント証明書を申請する

プライベート証明書を申請する を参照して、クライアント証明書を申請します。

  1. 証明書サービスコンソール にログインします

  2. 左側のナビゲーションウィンドウで、[証明書管理] > [PCA 証明書管理] を選択します[PCA 証明書管理] ページで、PCA サービスが配置されているリージョンを選択します。

  3. プライベートca タブで、使用するプライベート中間 CA を見つけ、操作 列の アプリケーション証明書 をクリックします。

    申请客户端证书01

  4. アプリケーション証明書 パネルで、パラメーターを設定し、申請の確認 をクリックします。次の表にパラメーターを示します。

    このガイドでは、クライアント証明書を申請する際に、証明書のタイプクライアント証明書 に設定し、氏名 (クライアントユーザーの一意の識別子として使用) を指定します。クライアント証明書を申請する際の他のパラメーター はデフォルト設定のままにするか、必要に応じて変更します。

    申请客户端证书02

    証明書申請を送信すると、プライベート証明書がすぐに発行されます。その後、操作 列の 証明書リスト をクリックして、プライベート証明書の情報を表示できます。

オプション 2: 自己署名 CA 証明書をアップロードする
  1. ECS01 にリモートでログインし、次のコマンドを使用して自己署名ルート CA 証明書を生成します。

    ALB は、相互認証のために自己署名ルート CA または自己署名中間 CA 証明書をサポートします。このガイドでは、自己署名ルート CA 証明書を使用します。

    1. 次のコマンドを使用して、ルート CA 証明書の秘密鍵を作成します:

      openssl genrsa -out root.key 4096
    2. 次のコマンドを使用して、ルート CA 証明書を要求するためのファイルを作成します:

      openssl req -new -out root.csr -key root.key

      他のパラメーターを設定します。例:

      説明

      CA 証明書のコモンネームが、クライアント証明書およびサーバー証明書のコモンネームと異なることを確認してください。

      Country Name (2 letter code) [XX]:cn
      State or Province Name (full name) []:bj
      Locality Name (eg, city) [Default City]:bj
      Organization Name (eg, company) [Default Company Ltd]:alibaba
      Organizational Unit Name (eg, section) []:test
      Common Name (eg, your name or your servers hostname) []:root
      Email Address []:a****@example.com
      A challenge password []:
      An optional company name []:
    3. 次のコマンドを使用して、ルート CA 証明書を作成します:

      openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650

      出力例:

      创建根CA证书

    4. ls コマンドを使用して、生成されたルート CA 証明書 root.crt とルート CA 証明書の秘密鍵 root.key を確認します。

      これらのルート CA 証明書ファイルをローカルコンピューターに ダウンロード して、後で Certificate Management Service にアップロードできるようにします。

  2. 自己署名ルート CA 証明書を Certificate Management Service にアップロードします。

    1. Certificate Management Service にログインします。

    2. 左側のナビゲーションウィンドウで、[証明書とドメイン名申請サービス] > [証明書申請リポジトリ] を選択します

    3. 証明書アプリケーションリポジトリ ページで、[リポジトリの作成] をクリックします。[リポジトリの作成] パネルで、[データソース][アップロードされた CA 証明書] に設定し、[OK] をクリックします。

      创建证书仓库

    4. 証明書アプリケーションリポジトリ ページで、作成した証明書リポジトリをクリックします。

    5. [公式証明書] ページで、[アップロードされた証明書] をクリックします。[CA 情報] パネルで、ルート CA 証明書ファイル root.crt をアップロードし、[確認して有効化] をクリックします。

      上传根CA证书

2. クライアント証明書をエクスポートする

オプション 1: Certificate Management Service を通じて購入したクライアント証明書をエクスポートする

Certificate Management Service を通じてクライアント証明書を購入し、そのクライアント証明書を相互認証に使用する場合は、次の操作を実行してクライアント証明書をエクスポートします:

  1. 左側のナビゲーションウィンドウで、[PCA 証明書管理] を選択します。プライベートca タブで、必要なプライベート証明書が発行されたプライベート中間 CA を見つけ、操作 列の 証明書リスト をクリックします。

    导出证书-证书列表

  2. 証明書リスト ページで、ダウンロードするプライベート証明書を見つけ、操作 列の ダウンロード をクリックします。

  3. 証明書のダウンロード ダイアログボックスで、[証明書フォーマット] パラメーターを設定し、確認してダウンロードする をクリックします。信頼チェーンを含める をオンにすると、ダウンロードされる証明書には完全な証明書チェーンが含まれます。

    このガイドでは、証明書フォーマット をブラウザで認識できる [PFX] に設定します。

    导出客户端证书

    次の図に示すように、ダウンロードされた証明書ファイルには、.pfx 拡張子を持つクライアント証明書ファイルと、.txt ファイル内のクライアント秘密鍵暗号化パスワードが含まれています。

    安装客户端证书

オプション 2: 自己署名証明書から生成されたクライアント証明書をエクスポートする

自己署名 CA 証明書を Certificate Management Service にアップロードし、その自己署名 CA 証明書から生成されたクライアント証明書を相互認証に使用する必要がある場合は、次の操作を実行してクライアント証明書を生成します:

ECS01 にリモートでログインし、次の手順を実行してクライアント証明書を生成します。

  1. 次のコマンドを使用して、クライアント証明書キーを生成します:

    openssl genrsa -out client.key 4096
  2. 次のコマンドを使用して、クライアント証明書を要求するためのファイルを生成します:

    openssl req -new -out client.csr -key client.key

    他のパラメーターを設定します。例:

    説明

    CA 証明書のコモンネームが、サーバー証明書、ルート証明書、および他のクライアント証明書のコモンネームと異なることを確認してください。

    Country Name (2 letter code) [XX]:cn
    State or Province Name (full name) []:bj
    Locality Name (eg, city) [Default City]:bj
    Organization Name (eg, company) [Default Company Ltd]:alibaba
    Organizational Unit Name (eg, section) []:test
    Common Name (eg, your name or your servers hostname) []:client-alb-user
    Email Address []:username@example.com
    A challenge password []:
    An optional company name []:
  3. 次のコマンドを使用して、クライアント証明書を生成します。

    openssl x509 -req -in client.csr -out client.crt -CA root.crt -CAkey root.key -CAcreateserial -days 3650

    出力例:

    生成客户端证书

  4. 次のコマンドを使用して、生成されたクライアント証明書 client.crt をブラウザで認識できる PKCS12 ファイルに変換します。プロンプトに従って、設定したクライアント秘密鍵の暗号化パスワードを入力します。

    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
  5. ls コマンドを使用して、生成された client.p12 クライアント証明書ファイルを確認します。

    クライアント証明書ファイルをローカルコンピューターに ダウンロード して、後でクライアントに送信できるようにします。

ステップ 2: 相互認証を有効にした HTTPS リスナーを設定する

  1. ALB コンソール の上部のナビゲーションバーで、ALB インスタンスが配置されているリージョンを選択します。[インスタンス] ページで、ALB インスタンスを見つけてその ID をクリックします。

  2. インスタンスの詳細ページで、[リスナー] タブをクリックし、[リスナーの作成] をクリックして、次の設定を完了してから [次へ] をクリックします。

    このガイドでは、[リスナープロトコル][HTTPS] に、[リスナーポート][443] に設定します。他の HTTPS リスナーパラメーター はデフォルト値のままにするか、必要に応じて変更します。

    HTTPS监听

  3. [SSL 証明書の設定] ステップで、購入したサーバー証明書を選択します。[相互認証を有効化] をオンにし、CA 証明書ソースと CA 証明書を選択します。TLS セキュリティポリシーを選択し、[次へ] をクリックします。

    次の図は、Alibaba Cloud が発行した CA 証明書を選択する例を示しています。

    HTTPS监听-双向-阿里签发

  4. [サーバーグループの選択] ステップで、右側のドロップダウンリストから [サーバータイプ] と作成したサーバーグループを選択します。バックエンドサーバー ECS01 と ECS02 の情報を確認し、[次へ] をクリックします。

  5. [設定の確認] ステップで、設定情報を確認し、[送信] をクリックします。

ステップ 3: DNS レコードを追加する

ビジネスのために、カスタムドメイン名を ALB インスタンスのドメイン名にマッピングするために DNS レコードを追加することをお勧めします。

  1. ALB コンソール の左側のナビゲーションウィンドウで、[ALB] > [インスタンス] を選択します。[インスタンス] ページで、ALB インスタンスの DNS 名をコピーします。

  2. CNAME レコードを追加します。

    1. Authoritative DNS Resolution ページで、カスタムドメイン名を見つけ、[操作] 列の [DNS 設定] をクリックします。

      説明

      Alibaba Cloud に登録されていないドメイン名の場合、DNS 解決を設定する前に、まず Alibaba Cloud DNS に ドメイン名を追加 する必要があります。

    2. [DNS 設定] ページで、[DNS レコードの追加] をクリックし、CNAME レコードを設定してから、[OK] をクリックします。

      このガイドでは、[レコードタイプ][CNAME] に、[レコード値] を ALB インスタンスの DNS 名に設定します。他の DNS レコードパラメーター はデフォルト値のままにするか、必要に応じて変更します。

      CNAME

ステップ 4: 相互認証の効果をテストする

このガイドでは、Windows クライアントとその上の Chrome ブラウザを使用してテストします。

  1. クライアントに エクスポートされたクライアント証明書 をインストールします。

    ダウンロードしたクライアント証明書ファイルをダブルクリックし、システム証明書インポートウィザードのプロンプトに従ってインストールを完了します。

  2. Chrome ブラウザのアドレスフィールドに https://<Your custom domain name> を入力します。表示されるダイアログボックスで、クライアント認証に使用する証明書を選択します。

    访问测试-选择证书

  3. ページを複数回更新します。ECS01 と ECS02 からの応答が交互に返される場合、相互認証が実装されています。

    访问测试-ECS01

    访问测试-ECS02

参考

コンソール

API

次の API 操作を呼び出し、CaEnabled パラメーターを true に設定して相互認証を有効にします: