一方向認証が設定されている場合、サーバーの認証後に 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 証明書のコモンネームは一意にする必要があります。サーバー証明書またはクライアント証明書と同じコモンネームを使用しないでください。
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出力は次のようになります。
[root@i-xxx ~]# openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650 Signature ok subject=C = cn, ST = bj, L = bj, O = alibaba, OU = test, CN = root, emailAddress = xxx@xxx.com Getting Private key -
lsを実行して、生成されたルート証明書root.crtと秘密鍵root.keyを確認します。
ステップ 3: クライアント証明書の生成
-
次のコマンドを実行して、クライアント証明書の秘密鍵を生成します。
-
次のコマンドを実行して、クライアント証明書の CSR ファイルを生成します。コモンネームをドメイン名に設定します。
-
次のコマンドを実行して、クライアント証明書を生成します。
-
次のコマンドを実行して、生成されたクライアント証明書
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 インスタンスが本番環境にある場合は、まずステージング環境でこの設定をテストしてください。または、既存のサービスに影響を与えないように、新しいリッスンポートを使用してください。
-
CLB コンソールにログインします。
-
作成した CLB インスタンスの ID をクリックします。
-
インスタンスリスナー タブで、リスナーの作成 をクリックします。
-
プロトコルとリスナー タブで次のパラメーターを設定し、次のステップ をクリックします。
-
[リスナープロトコルの選択]: HTTPS
-
[リスニングポート]: 443
-
-
SSL 証明書 タブで、アップロードしたサーバー証明書を選択します。
-
詳細設定 の横にある 編集 をクリックし、相互認証を有効にして、アップロードした CA 証明書を選択し、次のステップ をクリックします。
-
バックエンドサーバー を選択し、追加 をクリックしてバックエンドサーバーを追加します。
-
残りのパラメーターはデフォルト値のままにし、次のステップ をクリックして進みます。最後に 送信 をクリックしてリスナーを作成します。
ステップ 7: 相互認証機能のテスト
Windows クライアント
-
ブラウザーで
https://ip:portを入力します。ここで、ip は CLB のパブリック IP アドレスです。表示されるダイアログボックスで、プロンプトに従って証明書を確認します。 Web ページを更新します。リクエストがバックエンドサーバーに均等に分散されていることを確認できます。
ページに
Hello World ! This is ECS01.が表示され、リクエストが ECS01 サーバーに転送されたことを示しています。ページに
Hello World ! This is ECS02.が表示され、リクエストが ECS02 サーバーに転送されたことを示しています。
Linux クライアント
証明書がインストールされている Linux クライアントにログインし、次のコマンドを実行して CLB の相互認証を検証します。
sudo curl --cert /home/ca/client.crt --key /home/ca/client.key --cacert /home/ca/root.crt https://<サーバー証明書のドメイン名>:<ポート>
以下のレスポンスが返された場合、クライアントとサーバー間の相互認証が完了し、リクエストが 2 つの ECS インスタンスに分散されていることを示します。
[test@iZxxxw521i57Z ~]$ sudo curl --cert /home/ca/client.crt --key /home/ca/client.key --cacert /home/ca/root.crt https://xxx.com.cn
Hello World ! This is ECS01.
[test@iZxxxw521i57Z ~]$ sudo curl --cert /home/ca/client.crt --key /home/ca/client.key --cacert /home/ca/root.crt https://xxx.com.cn
Hello World ! This is ECS02.