Network Load Balancer (NLB) は、大規模な SSL オフロードをサポートしています。トラフィックのイングレスとして NLB インスタンスをデプロイし、SSL 証明書と認証局 (CA) 証明書を設定して相互認証を有効にすることができます。これにより、クライアントとサーバーの両方がデジタル証明書を提供して自身の ID を証明する必要があり、ワークロードのセキュリティが向上します。
背景情報
一方向認証:クライアントはサーバーの ID を検証する必要があります。サーバーはクライアントの ID を検証する必要はありません。クライアントは認証のためにサーバーから公開鍵証明書をダウンロードします。接続は、サーバーの ID が検証された後にのみ確立できます。
相互認証:クライアントはサーバーからサーバー証明書 (公開鍵証明書) をダウンロードし、認証のためにクライアント証明書 (公開鍵証明書) をサーバーにアップロードします。接続は、クライアントとサーバーの両方の ID が検証された後にのみ確立できます。相互認証は、より高いセキュリティを提供します。
前提条件
-
NLB インスタンスが作成されていること。詳細については、「NLB インスタンスの作成と管理」をご参照ください。
3 つの Elastic Compute Service (ECS) インスタンスが作成されていること。インスタンスの作成方法については、「ウィザードを使用したインスタンスの作成」をご参照ください。
ECS01 と ECS02 は、バックエンドサーバーとして NLB インスタンスに追加されます。ECS01 と ECS02 には、異なる NGINX アプリケーションがデプロイされます。
ECS03 は、自己署名サーバー証明書とクライアント証明書を生成するために使用されます。OpenSSL サイトから OpenSSL をダウンロードし、ECS03 にインストールします。OpenSSL のバージョンは 1.1.1 以降です。既存の Linux サーバーを使用して自己署名証明書を生成する場合、ECS03 を作成する必要はありません。
NLB インスタンス用にサーバーグループが作成され、ECS01 と ECS02 がサーバーグループに追加されていること。この例では、ECS01 と ECS02 のバックエンドポートは 80 に設定されています。
重要サーバーグループのバックエンドプロトコルは TCP である必要があります。NLB からバックエンドサーバーに送信されるリクエストは SSL 復号され、バックエンドサーバーは受信したリクエストに対して SSL 復号を行う必要はありません。
TCP over SSL を使用するリスナーを、が有効になっているサーバーグループに関連付けることはできません。サーバーグループで クライアントアドレスの保持 機能が無効になっていることを確認してください。
ステップ 1:CA 証明書の準備
Certificate Management Service コンソールにログインします。
左側のナビゲーションウィンドウで、PCA 証明書管理 を選択します。
PCA 証明書管理 ページで、プライベートca タブで、ルート CA 証明書を見つけます。
ルート CA 証明書の横にある
アイコンをクリックし、管理したいプライベート中間 CA を見つけ、操作 列の アプリケーション証明書 をクリックします。アプリケーション証明書 パネルで、パラメーターを設定し、申請の確認 をクリックします。
以下のセクションでは、このトピックに関連するパラメーターについて説明します。詳細については、「プライベート証明書の管理」をご参照ください。
パラメーター
説明
証明書タイプ
購入するプライベート証明書の種類を選択します。この例では、 クライアント証明書 が選択されています。
氏名
クライアントユーザーの一意の識別子です。クライアント証明書にのみ必要です。
この例では、NLB インスタンスのドメイン名を入力します。
有効期間
プライベート証明書の有効期間を指定します。プライベート証明書の有効期間は、購入するプライベート認証局 (PCA) サービスのサブスクリプション期間を超えることはできません。
この例では、デフォルトの有効期間である 30 日が使用されます。
リクエストが送信されると、プライベート証明書はすぐに発行されます。プライベート証明書の詳細を表示するには、プライベート CA を見つけ、操作 列の 証明書リスト をクリックし、証明書リスト ページで情報を表示します。
ステップ 2:サーバー証明書の準備
ブラウザは、サーバーから送信された証明書が信頼できる CA によって発行されたものであるかどうかを確認することで、サーバーの ID を検証します。このトピックでは、サーバー証明書を取得するために使用できる 2 つの方法について説明します。Certificate Management Service からサーバー証明書を購入するか、自己署名証明書を Certificate Management Service にアップロードすることができます。
方法 1:サーバー証明書の購入
Certificate Management Service または他のサービスプロバイダーからサーバー証明書を購入できます。詳細については、「SSL 証明書の購入」をご参照ください。
方法 2:自己署名サーバー証明書のアップロード
ECS03 にリモートでログインし、次のコマンドを実行して自己署名サーバー証明書を生成します。CA 証明書が ECS03 に保存されていることを確認してください。この例で使用される CA 証明書ファイルは
root.crtとroot.keyです。次のコマンドを実行して、サーバー証明書の秘密鍵を生成します。
sudo openssl genrsa -out server.key 4096次のコマンドを実行して、証明書署名要求 (CSR) を生成します。
sudo openssl req -new -out server.csr -key server.key他のパラメーターを設定します。例:
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) []:www.example.com Email Address []:a.alibaba.com A challenge password []: An optional company name []:重要コモンネームをサーバー証明書に関連付けられているドメイン名に設定します。ドメイン名が有効であることを確認してください。他のパラメーターの値は、ルート証明書とクライアント証明書の値と同じにしてください。
この例では、NLB インスタンスはカスタムドメイン名
www.example.comを使用して外部サービスを提供します。したがって、コモンネームはwww.example.comに設定されます。次のコマンドを実行して、サーバー証明書の公開鍵を生成します。
sudo openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650次の図は結果を示しています。

次のコマンドを実行して、サーバー証明書ファイルを保存するフォルダーを作成します。
sudo mkdir -p /root/ssl次のコマンドを実行して、サーバー証明書をフォルダーにコピーします。
sudo cp server.crt /root/ssl sudo cp server.key /root/ssl次のコマンドを実行して、サーバー証明書
server.crtとサーバー証明書の秘密鍵server.keyを表示します。cd /root/ssl ls次の図は結果を示しています。

この例では、Windows クライアントが使用されます。Windows クライアントでコマンドラインインターフェイス (CLI) を開き、次のコマンドを実行して、ステップ 1 で生成されたサーバー証明書ファイルをローカルデスクトップにエクスポートします。
scp root@IPaddress:/root/ssl/server.crt C:\Users\Public\Desktop # 'IPaddress' をサーバー証明書を生成するサーバーの IP アドレスに置き換えます scp root@IPaddress:/root/ssl/server.key C:\Users\Public\Desktop # 'IPaddress' をサーバー証明書を生成するサーバーの IP アドレスに置き換えますCertificate Management Service コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
アップロードされた証明書の管理 タブをクリックし、証明書のアップロード をクリックします。
証明書のアップロード パネルで、次のパラメーターを設定し、OK をクリックします。
詳細については、「SSL 証明書のアップロード、同期、共有」をご参照ください。
パラメーター
説明
証明書アルゴリズム
この例では、国際的に認められたアルゴリズム が選択されています。
証明書名
アップロードする証明書の名前を入力します。
証明書ファイル
PEM 形式でエンコードされた CA 証明書ファイルの内容を入力します。
次のいずれかの方法で内容を入力できます。方法 1:テキストエディターを使用して PEM または CRT 形式の CA 証明書ファイルを開きます。次に、内容を [証明書ファイル] フィールドにコピーします。方法 2:[証明書ファイル] フィールドの下にある アップロードされたファイルの解析 をクリックします。次に、コンピューターから CA 証明書ファイルを選択して、ファイルの内容をアップロードします。
この例では、サーバー証明書ファイル
server.crtがアップロードされます。証明書秘密鍵
PEM 形式でエンコードされた秘密鍵ファイルの内容を入力します。
次のいずれかの方法で内容を入力できます。方法 1:テキストエディターを使用して KEY 形式の秘密鍵ファイルを開きます。次に、内容を [秘密鍵の追加] フィールドにコピーします。方法 2:[秘密鍵の追加] フィールドの下にある アップロードされたファイルの解析 をクリックします。次に、コンピューターから秘密鍵ファイルを選択して、ファイルの内容をアップロードします。
この例では、秘密鍵ファイル
server.keyがアップロードされます。証明書チェーン
証明書チェーンファイルの内容を入力します。このパラメーターは、この例では無視されます。
ステップ 3:クライアント証明書の準備
ビジネス要件に基づいて、次のいずれかの方法でクライアント証明書を準備できます。
Certificate Management Service コンソールにログインします。
左側のナビゲーションウィンドウで、PCA 証明書管理 を選択します。
PCA 証明書管理 ページで、プライベートca タブで、ルート CA 証明書を見つけます。
ルート CA 証明書の購入方法の詳細については、「プライベート CA の購入と有効化」をご参照ください。
ルート CA 証明書を見つけ、
アイコンをクリックします。次に、下位の CA 証明書を見つけ、操作 の 証明書リスト をクリックします。証明書リスト ページで、対象のプライベート証明書を見つけます。操作 列で、ダウンロード をクリックします。
証明書のダウンロード ダイアログボックスで、証明書の形式を選択し、確認してダウンロードする をクリックします。この例では、CRT 形式が選択され、クライアント証明書は
client.crt、証明書の秘密鍵はclient.keyです。クライアント証明書をブラウザが認識できる PKCS12 ファイルに変換します。
ECS03 にリモートでログインします。詳細については、「インスタンス接続のガイドライン」をご参照ください。
次のコマンドを実行して、クライアント証明書を保存するフォルダーを作成します。
sudo mkdir -p /root/ca/usersクライアント証明書
client.crtと証明書の秘密鍵client.keyを users ディレクトリにアップロードします。次のコマンドを実行して、クライアント証明書を PKCS12 ファイルに変換します。
sudo openssl pkcs12 -export -clcerts -in /root/ca/users/client.crt -inkey /root/ca/users/client.key -out /root/ca/users/client.p12指示に従って、証明書の秘密鍵の暗号化キーを設定します。
クライアント証明書のエクスポートに使用するパスワードを入力します。このパスワードはクライアント証明書を暗号化するために使用され、クライアント証明書のインストールに必要です。
次の図は結果を示しています。

次のコマンドを実行して、生成されたクライアント証明書を表示します。
cd /root/ca/users ls次の図は結果を示しています。

この例では、Windows クライアントが使用されます。CLI を開き、次のコマンドを実行してクライアント証明書をエクスポートします。
scp root@IPaddress:/root/ca/users/client.p12 C:\Users\Public\Desktop # 'IPaddress' をクライアント証明書を生成するサーバーの IP アドレスに置き換えます
ステップ 4:クライアント証明書のインストール
クライアントにクライアント証明書をインストールします。この例では、Windows クライアントと Linux クライアントを使用して、クライアント証明書のインストール方法を示します。
Windows クライアント
クライアント証明書を Microsoft Edge にインポートします。
Microsoft Edge を開きます。右上隅で、 を選択します。
左側のナビゲーションウィンドウで、[プライバシー、検索、サービス] タブをクリックします。次に、[セキュリティ] セクションの [証明書の管理] をクリックし、PKCS12 ファイルをインポートします。このステップでは、ステップ 3:クライアント証明書の準備 でクライアント証明書のエクスポートに使用したパスワードを入力する必要があります。
Linux クライアント
ECS03 を使用してクライアント証明書を生成した場合、クライアント証明書は ECS03 のディレクトリに保存されます。別の Linux クライアントを使用してクライアント証明書を生成した場合は、まず次の手順を実行して証明書を Linux クライアントのディレクトリにコピーします。
Linux クライアントにログインします。次のコマンドを実行して、クライアント証明書、サーバー証明書、およびルート証明書をディレクトリにコピーします。
次のコマンドを実行してフォルダーを作成します。
sudo mkdir /root/ca次のコマンドを実行してディレクトリの権限を変更します。
sudo chmod 700 /root/ca次のコマンドを実行して、証明書を Linux クライアントのディレクトリにコピーします。
次のパスは参考用です。実際に使用するパスを指定してください。
sudo scp home@IPaddress:/root/ca/users/client.crt /root/ca // 'IPaddress' をクライアント証明書を生成するサーバーの IP アドレスに置き換えます sudo scp home@IPaddress:/root/ca/root.crt /root/ca // 'IPaddress' をルート証明書を生成するサーバーの IP アドレスに置き換えます sudo scp home@IPaddress:/root/ca/root.key /root/ca // 'IPaddress' をルート証明書を生成するサーバーの IP アドレスに置き換えます sudo scp home@IPaddress:/root/ssl/server.crt /root/ca // 'IPaddress' をサーバー証明書を生成するサーバーの IP アドレスに置き換えます sudo scp home@IPaddress:/root/SSL/server.key /root/ca // 'IPaddress' をサーバー証明書を生成するサーバーの IP アドレスに置き換えます
ステップ 5:TCP over SSL を使用するリスナーの相互認証の設定
NLB コンソールにログインします。
トップナビゲーションバーで、NLB インスタンスのリージョンを選択します。
インスタンス ページで、NLB インスタンスを見つけ、リスナーの作成 列の 操作 をクリックします。
リスナーの設定 ステップで、次のパラメーターを設定し、次へ をクリックします。
次の表では、一部のパラメーターのみを説明しています。他のパラメーターはデフォルト値のままにします。詳細については、「TCP over SSL を使用するリスナーの作成」をご参照ください。
パラメーター
手順
リスナープロトコルの選択
リスナープロトコルを選択します。この例では、[TCPSSL] が選択されています。
リスナーポート
NLB インスタンスがリッスンするポートを指定します。NLB インスタンスは、このポートを使用してリクエストを受信し、バックエンドサーバーにリクエストを転送します。この例では、[443] ポートを使用します。
[SSL 証明書の設定] ステップで、ステップ 2:サーバー証明書の準備 で指定したサーバー証明書を サーバー証明書 ドロップダウンリストから選択します。
相互認証の有効化 をオンにします。ステップ 1 で購入した CA 証明書を [デフォルト CA 証明書] ドロップダウンリストから選択します。
TLS セキュリティポリシー を選択し、次へ をクリックします。
[サーバーグループの選択] ステップで、作成したサーバーグループを選択し、バックエンドサーバー ECS01 と ECS02 の情報を表示します。この例では、バックエンドサーバーのポートは 80 に設定されています。次に、次へ をクリックします。
[設定の確認] ステップで、設定を確認し、送信 をクリックします。
ステップ 6:相互認証の検証
Windows クライアント
NLB の インスタンス ページに移動し、管理したい NLB インスタンスの ID をクリックし、リスナー タブをクリックして、TCP over SSL を使用するリスナーのヘルスチェックステータスを表示します。
ヘルスチェックステータス 列に 正常 と表示されている場合、バックエンドサーバーは NLB リスナーによって転送されたリクエストを処理できます。
ブラウザのアドレスバーに
https://サーバー証明書に関連付けられたドメイン名を入力します(例:https://www.example.com)。表示されるダイアログボックスで、クライアントの ID を検証するために使用する証明書を選択し、[OK]をクリックします。
ブラウザのキャッシュによる問題を避けるため、レイヤー 4 負荷分散をテストする際は、プライベートブラウジングモードでドメイン名にアクセスすることを推奨します。結果は、リクエストが ECS01 と ECS02 に分散されたことを示しています。


Linux クライアント
ルート証明書、サーバー証明書、およびクライアント証明書が保存されている Linux クライアントにログインし、次のコマンドを実行して相互認証をテストします。
sudo curl --cert /root/ca/client.crt --key /root/ca/client.key --cacert /root/ca/root.crt www.example.comwww.example.com は、サーバー証明書に関連付けられているドメイン名です。
次のエコー応答パケットは、クライアントとサーバーの両方が相互認証に合格し、リクエストが ECS01 と ECS02 に分散されていることを示しています。
> [設定]