一方向認証が設定されている場合、サーバーの認証後にHTTPS接続を確立できます。 相互認証が設定されている場合、HTTPS接続は、クライアントとサーバーの両方が認証された後にのみ確立できます。 相互認証は、より高いセキュリティを提供する。 相互認証を設定して、ビジネスクリティカルなサービスのセキュリティを向上させることができます。 このトピックでは、Classic Load Balancer (CLB) インスタンスのHTTPSリスナーで相互認証を設定する方法について説明します。
手順
この例では、自己署名認証局 (CA) 証明書を使用してクライアント証明書に署名します。 HTTPSリスナーで相互認証を設定するには、次の手順を実行します。
前提条件
CLBインスタンスが作成されます。
異なるアプリケーションサービスをホストする2つのECS (Elastic Compute Service) インスタンスが作成されます。 この例では、ECSインスタンスの名前はECS01およびECS02です。
ステップ1: サーバー証明書の購入
サーバー証明書は、証明書管理サービスコンソールまたは別のサービスプロバイダーから購入できます。 ブラウザは、サーバによって送信された証明書が信頼できるCAによって発行されたものかどうかをチェックすることによって、サーバのIDを認証する。
この例では、サーバー証明書は証明書管理サービスコンソールから購入されます。 詳細については、「SSL証明書の購入」をご参照ください。
証明書に関連付ける有効なドメイン名があることを確認してください。
ステップ2: OpenSSLを使用してCA証明書を生成する
OpenSSLがインストールされているLinuxマシンにログオンします。
次のコマンドを実行して、ルートCA証明書の秘密鍵を作成します。
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 []:
次のコマンドを実行して、ルートCA証明書を作成します。
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
次の図は結果を示しています。
Is
コマンドを実行して、root.crt
ルートCA証明書ファイルとroot.key
秘密鍵ファイルを照会します。
ステップ3: クライアント証明書の生成
次のコマンドを実行して、クライアント証明書の秘密鍵を生成します。
次のコマンドを実行して、クライアント証明書を作成するためのCSRを生成します。 CLBインスタンスのドメイン名に共通名を設定します。
次のコマンドを実行して、生成されたクライアント証明書を表示します。
次のコマンドを実行して、
client.crt
クライアント証明書ファイルを、ブラウザで認識可能なPKCS12ファイルに変換します。 クライアント証明書の秘密鍵の暗号化に使用するパスワードを入力します。Is
コマンドを実行して、client.key
、client.crt
、およびclient.p12
クライアント証明書ファイルを照会します。
openssl genrsa -out client.key 4096
openssl req -new -out client.csr -key client.key
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650
openssl 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証明書
クライアントの公開鍵証明書をアップロードします。
リージョン
CLBインスタンスのリージョンを選択します。
ステップ6: HTTPSリスナーで相互認証を設定する
CLB コンソールにログインします。
管理するCLBインスタンスのIDをクリックします。
[リスナー] タブで、[リスナーの追加] をクリックします。
[プロトコルとリスナー] ステップで、パラメーターを設定し、[次へ] をクリックします。
[リスナープロトコルの選択]: この例では、HTTPSが選択されています。
リスナーポート: この例では、ポート443が選択されています。
[証明書管理サービス] ステップで、アップロードしたサーバー証明書を選択します。
[詳細設定] の右側にある [変更] をクリックし、相互認証をオンにして、アップロードしたCA証明書を選択し、[次へ] をクリックします。
[デフォルトサーバーグループ] を選択し、[さらに追加] をクリックしてバックエンドサーバーを追加します。
他のパラメーターにはデフォルト値を使用し、[次へ] をクリックし、[送信] をクリックします。
ステップ7: 相互認証が期待どおりに機能するかどうかをテストする
Windowsクライアント
ブラウザから
https:// ip:port
にアクセスします。 ipをCLBインスタンスのパブリックIPアドレスに置き換えます。 表示されるダイアログボックスで、クライアント証明書を選択し、[OK] をクリックします。ページをリフレッシュすると、リクエストはECS01とECS02の間で分散されます。
Linuxクライアント
Linuxクライアントにログインし、次のコマンドを実行して、相互認証が期待どおりに機能するかどうかをテストします。
sudo curl --cert /home/ca/client.crt --key /home/ca/client.key --cacert /home/ca/ca.crt https://<The domain name associated with the server certificate>:<port>
次のエコー応答パケットは、クライアントとサーバの両方が相互認証を通過し、要求がECS01とECS02に分散されたことを示しています。