一方向認証では、サーバーの認証後に HTTPS 接続を確立できます。相互認証では、クライアントとサーバーの両方が認証された後にのみ HTTPS 接続を確立できます。相互認証はより高いセキュリティを提供します。ビジネスクリティカルなサービスを保護するために、相互認証を構成できます。このトピックでは、Classic Load Balancer (CLB) インスタンスの HTTPS リスナーで相互認証を構成する方法について説明します。
操作手順
この例では、自己署名 CA 証明書を使用してクライアント証明書に署名します。HTTPS リスナーで相互認証を構成するには、以下の手順を実行します。

前提条件
-
CLB インスタンスを作成済みであること。
-
それぞれ異なるアプリケーションを実行する 2 つのバックエンドサーバー (ECS01 と ECS02) を作成済みであること。
ステップ 1: サーバー証明書の購入
Alibaba Cloud の Certificate Management Service コンソール または他のサービスプロバイダーからサーバー証明書を購入できます。ブラウザを使用して、サーバーから送信された証明書が信頼できる機関によって発行されたかどうかを確認できます。
このトピックでは、Alibaba Cloud の Certificate Management Service コンソール から購入したサーバー証明書を例とします。詳細については、「SSL 証明書の購入」をご参照ください。
証明書に関連付ける有効なドメイン名を所有していることを確認してください。
ステップ 2: OpenSSL を使用した CA 証明書の生成
相互認証では、サーバー証明書はブラウザから信頼されるように、信頼できる CA によって発行される必要があります (ステップ 1)。ただし、クライアント証明書はお客様が管理および配布するため、公的な信頼チェーンは必要ありません。したがって、自己署名 CA 証明書を使用してクライアント証明書を発行できます。次の手順に従って、クライアント証明書を発行するための自己署名 CA 証明書を生成します。
OpenSSL がインストールされている任意の Linux マシンにログインします。
-
次のコマンドを実行して、ルート証明書のプライベートキーを作成します。
openssl genrsa -out root.key 4096 -
次のコマンドを実行して、ルート証明書の証明書署名要求 (CSR) ファイルを作成します。
openssl req -new -out root.csr -key root.keyプロンプトに従って情報を入力します。以下は例です。
説明CA 証明書のコモンネーム (CN) は一意にする必要があります。サーバー証明書やクライアント証明書と同じコモンネーム (CN) を使用しないでください。
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.alibaba.com A challenge password []: An optional company name []: -
次のコマンドを実行して、ルート証明書を作成します。
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650出力は次のようになります。

-
lsを実行して、生成されたルート証明書root.crtと秘密鍵root.keyを確認します。
ステップ 3: クライアント証明書の生成
-
次のコマンドを実行して、クライアント証明書のプライベートキーを生成します。
-
次のコマンドを実行して、クライアント証明書の CSR ファイルを生成します。コモンネーム (CN) をお客様のドメイン名に設定します。
-
次のコマンドを実行して、クライアント証明書を生成します。
-
次のコマンドを実行して、生成されたクライアント証明書
client.crtをブラウザで認識できる PKCS12 ファイルに変換します。プロンプトに従って、クライアントの秘密鍵に設定した暗号化パスワードを入力します。 -
lsを実行して、生成されたクライアント証明書ファイルclient.key、client.crt、client.p12を表示します。
openssl genrsa -out client.key 4096openssl req -new -out client.csr -key client.keyopenssl x509 -req -in client.csr -out client.crt -CA root.crt -CAkey root.key -CAcreateserial -days 3650openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12ステップ 4: クライアント証明書のインストール
クライアントにクライアント証明書をインストールします。
Windows クライアント
client.p12 ファイルをダブルクリックし、「証明書インポートウィザード」に従ってインストールします。
Linux クライアント
client.key、client.crt、および root.crt ファイルを、Linux クライアント上の任意のディレクトリにアップロードします。
この例では、ディレクトリは /home/ca です。ディレクトリの権限を変更するには、sudo chmod 700 /home/ca を実行します。
ステップ 5: サーバー証明書と CA 証明書のアップロード
CLB コンソールにログインします。
-
左側のナビゲーションペインで、 を選択し、証明書の作成 をクリックしてサーバー証明書をアップロードします。
-
証明書の作成 パネルで サードパーティの証明書 をクリックし、次のパラメーターを設定してから、作成済み をクリックします。
パラメーター
説明
[証明書名]
証明書の名前を入力します。
[証明書のタイプ]
サーバー証明書 を選択します。
公開鍵証明書
サーバー証明書の内容をエディターに貼り付けます。
[秘密鍵]
サーバー証明書のプライベートキーをエディターに貼り付けます。
[リージョン]
CLB インスタンスのリージョンを選択します。
-
証明書 ページで 証明書の作成 をクリックして CA 証明書をアップロードします。
-
証明書の作成 パネルで サードパーティの証明書 をクリックし、次のパラメーターを設定したあと、作成済み をクリックします。
パラメーター
説明
[証明書名]
証明書の名前を入力します。
[証明書のタイプ]
CA 証明書 を選択します。
[クライアント CA 公開鍵証明書]
CA 証明書の内容を貼り付けます。
[リージョン]
CLB インスタンスのリージョンを選択します。
ステップ 6: HTTPS リスナーでの相互認証の設定
CLB は、証明書がインストールされていないクライアントからのリクエストを拒否します。CLB インスタンスが本番環境にある場合は、まずステージング環境でこの設定をテストしてください。または、既存のサービスを中断しないように、新しいリスニングポートを使用してください。
-
Classic Load Balancer コンソールにログインします。
-
作成した CLB インスタンスの ID をクリックします。
-
インスタンスリスナー タブで、リスナーの作成 をクリックします。
-
プロトコルとリスナー タブで、以下のパラメーターを設定し、次のステップ をクリックします。
-
[リスナープロトコルの選択]: HTTPS
-
[リスニングポート]: 443
-
-
SSL 証明書 タブで、アップロードしたサーバー証明書を選択します。
-
詳細設定 の横にある 編集 をクリックし、相互認証を有効にして、アップロード済みの CA 証明書を選択してから、次のステップ をクリックします。
-
バックエンドサーバー を選択し、追加 をクリックしてバックエンドサーバーを追加します。
-
残りのパラメーターにはデフォルト値を使用し、次のステップ をクリックしてウィザードを進めます。最後のページで、送信 をクリックしてリスナーを作成します。
ステップ 7: 相互認証機能のテスト
Windows クライアント
-
ブラウザーで
https://ip:portを入力します。ここで、ip は CLB のパブリック IP アドレスです。表示されるダイアログボックスで、プロンプトに従って証明書を確認します。 Web ページを更新します。リクエストがバックエンドサーバーに均等に分散されていることを確認できます。


Linux クライアント
証明書がインストールされている Linux クライアントにログインし、次のコマンドを実行して CLB の相互認証を検証します。
sudo curl --cert /home/ca/client.crt --key /home/ca/client.key --cacert /home/ca/root.crt https://<サーバー証明書のドメイン名>:<ポート>
次のような応答が返された場合、クライアントとサーバーの相互認証が完了し、リクエストが ECS インスタンスに分散されていることを示します。