Network Load Balancer (NLB) は、大規模な SSL オフロードをサポートしています。トラフィックのエントリポイントに NLB インスタンスをデプロイし、SSL 証明書と認証局 (CA) 証明書を設定できます。TCP/SSL 相互認証は、通信する両当事者を認証することで、サービスのセキュリティを強化します。
背景情報
一方向認証:クライアントはサーバーを認証しますが、サーバーはクライアントを認証しません。クライアントは、安全な通信チャネルを確立する前に、サーバーの公開鍵証明書を要求して検証します。
相互認証:クライアントはサーバーの公開鍵証明書を要求して検証します。サーバーもクライアントの公開鍵証明書を要求して検証します。データ転送のための安全な通信チャネルは、両当事者が認証された後にのみ確立されます。このプロセスにより、サービスのセキュリティレベルが向上します。
前提条件
NLB インスタンスが作成されていること。詳細については、「NLB インスタンスの作成と管理」をご参照ください。
3 つの Elastic Compute Service (ECS) インスタンスが作成されていること。詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
ECS01 と ECS02 インスタンスは、NLB インスタンスのバックエンドサーバーとして機能します。ECS01 と ECS02 には、2 つの異なるアプリケーションサービスがデプロイされています。
ECS03 インスタンスは、自己署名のサーバー証明書とクライアント証明書を生成するために使用されます。OpenSSL 公式ウェブサイトから OpenSSL 1.1.1 以降をダウンロードし、ECS03 インスタンスにインストールします。または、既存の Linux サーバーを使用して証明書を自己署名することもできます。この場合、ECS03 インスタンスを作成する必要はありません。
NLB サーバーグループを作成し、バックエンドサーバーとして ECS01 と ECS02 を追加済みであること。このトピックでは、ECS01 と ECS02 の両方のバックエンドポートとして 80 を使用します。
重要サーバーグループのバックエンドプロトコルは TCP である必要があります。NLB からバックエンドサーバーに送信されるリクエストは SSL 復号化されており、バックエンドサーバーは受信したリクエストに対して SSL 復号化を行う必要はありません。
クライアント IP の保持が有効になっているサーバーグループに、TCP over SSL を使用するリスナーを関連付けることはできません。サーバーグループでこの機能が無効になっていることを確認してください。
ステップ 1:CA 証明書の準備
Certificate Management Service コンソールにログインします。
左側のナビゲーションウィンドウで、[PCA 証明書管理] をクリックします。
[PCA 証明書管理] ページで、プライベートca タブをクリックし、対象のルート CA 証明書を探します。
目的のルート CA 証明書の横にある
アイコンをクリックします。 目的の非公開中間 CA を探し、[アクション] 列で [証明書のリクエスト] をクリックします。[証明書のリクエスト] パネルで、証明書情報を設定し、申請の確認 をクリックします。
このトピックでは、このトピックに関連するパラメーターのみを説明します。証明書のリクエストに関する詳細については、「プライベート証明書の管理」をご参照ください。
パラメーター
説明
証明書タイプ
プライベート証明書の種類です。[クライアント証明書] を選択します。
名前
このパラメーターはクライアント証明書にのみ必要です。クライアントユーザーの一意の識別子です。
この例では、作成した NLB インスタンスのドメイン名を入力します。
有効期間
プライベート証明書の有効期間。この期間は、購入したプライベート認証局 (PCA) サービスの期間を超えることはできません。
この例では、[30] 日のデフォルト値を使用します。
証明書リクエストを提出すると、証明書はすぐに発行されます。対象のプライベート CA の[アクション] 列にある 証明書リスト をクリックすると、[証明書リスト] ページで発行された証明書を表示できます。
ステップ 2:サーバー証明書の準備
ブラウザは、サーバーから送信された証明書が信頼できる CA によって発行されたものかどうかを確認できます。このトピックでは、サーバー証明書を取得するための 2 つの方法について説明します:Certificate Management Service から購入する方法と、自己署名証明書を作成してアップロードする方法です。
方法 1:サーバー証明書の購入
Alibaba Cloud の デジタル証明書管理サービスコンソールまたは他のサービスプロバイダーからサーバー証明書を購入できます。サーバー証明書の購入方法の詳細については、「DV 証明書の購入」をご参照ください。
方法 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 []:重要Common Name には、サーバー証明書にバインドされるドメイン名を入力します。ドメイン名が有効であることを確認してください。他のパラメーターの値は、ルート証明書とクライアント証明書の生成に使用されたものと同じである必要があります。
このトピックでは、NLB インスタンスは、DNS によって解決されるカスタムドメイン名
www.example.comを介してパブリックにサービスを提供します。Common Name には、カスタムドメイン名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 クライアントでコマンドラインウィンドウを開き、次のコマンドを実行して、ステップ 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 アドレスに置き換えます。証明書サービスコンソールにログインします。
左側のナビゲーションウィンドウで、を選択します。
[証明書のアップロード] タブで、[証明書のアップロード] をクリックします。
アップロードされた証明書 パネルで、次のパラメーターを設定し、[OK] をクリックします。
詳細については、「SSL 証明書のアップロード、同期、共有」をご参照ください。
パラメーター
説明
証明書アルゴリズム
この例では、[国際標準] を選択します。
証明書名
アップロードする証明書の名前を入力します。
証明書ファイル
証明書ファイルの PEM エンコードされた内容を入力します。
テキストエディターで PEM または CRT フォーマットの証明書ファイルを開き、内容をコピーしてテキストボックスに貼り付けることができます。また、テキストボックスの下にある [ファイルのアップロードと解析] をクリックし、コンピューターに保存されている証明書ファイルを選択して、ファイルの内容をテキストボックスにアップロードすることもできます。
この例では、エクスポートされたサーバー証明書ファイル
server.crtをアップロードします。証明書秘密鍵
証明書の秘密鍵の PEM エンコードされた内容を入力します。
テキストエディターを使用して KEY フォーマットの秘密鍵ファイルを開き、内容をコピーしてテキストボックスに貼り付けることができます。また、テキストボックスの下にある [ファイルをアップロードして解析] をクリックし、コンピューターに保存されている秘密鍵ファイルを選択して、ファイルの内容をテキストボックスにアップロードすることもできます。
この例では、エクスポートされたサーバー証明書の秘密鍵ファイル
server.keyをアップロードします。証明書チェーン
証明書チェーンのエンコーディング。このパラメーターは、この例では設定しません。
ステップ 3:クライアント証明書の準備
要件を満たすクライアント証明書を準備します。
Certificate Management Service コンソールにログインします。
左側のナビゲーションウィンドウで、[PCA 証明書管理] をクリックします。
[プライベート CA 証明書管理] ページで、プライベートca タブをクリックし、目的のルート CA 証明書を探します。
詳細については、「プライベート CA の購入と有効化」をご参照ください。
対象のルート CA 証明書の横にある
アイコンをクリックします。次に、対象の中間 CA 証明書を探し、[操作] 列の証明書リスト をクリックします。証明書リスト ページで、ダウンロードしたいプライベート証明書を見つけ、操作 列の ダウンロード をクリックします。
証明書のダウンロード ダイアログボックスで、証明書フォーマットを選択し、確認してダウンロードする をクリックします。たとえば、CRT 形式で証明書をダウンロードする場合、クライアント証明書は
client.crt、クライアント秘密鍵はclient.keyという名前になります。クライアント証明書をブラウザと互換性のある PKCS12 ファイルに変換します。
ECS03 インスタンスにリモートでログインします。詳細については、「ECS リモート接続ガイド」をご参照ください。
次のコマンドを実行して、クライアント証明書を保存するディレクトリを作成します。
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 クライアントを例として使用します。ローカルマシンでコマンドラインウィンドウを開き、次のコマンドを実行して、生成されたクライアント証明書を ECS インスタンスからエクスポートします。
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 サーバーでクライアント証明書を生成した後、証明書はサーバー上のフォルダに保存されます。別の Linux クライアントで NLB 相互認証を検証するには、まず相互認証証明書をそのクライアントのフォルダにコピーする必要があります。
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/SSL リスナーの相互認証の設定
NLB コンソールにログインします。
トップナビゲーションバーで、NLB インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、目的のインスタンスを見つけ、操作 列の リスナーの作成 をクリックします。
[リスナーの設定] ウィザードで、次のパラメーターを設定し、次へ をクリックします。
このトピックでは、この例に関連するパラメーターのみを説明します。他のパラメーターにはデフォルト値を使用します。詳細については、「TCP/SSL リスナーの追加」をご参照ください。
設定
説明
リスナープロトコルの選択
リスナープロトコルを選択します。この例では、[TCPSSL] を選択します。
リスナーポート
リクエストを受信し、バックエンドサーバーに転送するリスナーポートを入力します。この例では、 [443] を入力します。
[SSL 証明書の設定] ウィザードで、サーバー証明書 ドロップダウンリストから、「ステップ 2: サーバー証明書の準備」で購入またはアップロードしたサーバー証明書を選択します。
相互認証の有効化 スイッチをオンにし、CA 証明書のソースとして [Alibaba Cloud が発行] を選択し、[デフォルトの CA 証明書を選択] ドロップダウンリストから購入した CA 証明書を選択します。
TLS セキュリティポリシー を選択し、次へ をクリックします。
[サーバーグループの選択] ウィザードで、作成したサーバーグループを選択し、バックエンドサーバー ECS01 と ECS02 の情報を表示してから、次へ をクリックします。この例では、両方のサーバーのポートが 80 に設定されています。
[構成の確認] ウィザードで、構成を確認し、送信 をクリックします。
ステップ 6:TCP/SSL 相互認証の検証
Windows クライアント
NLB の インスタンス ページに戻ります。対象の NLB インスタンスの ID をクリックし、リスナー タブをクリックして、TCP/SSL リスナーのヘルスチェックステータスを表示します。
ヘルスチェックステータス 列に [正常] と表示されている場合、これはバックエンドサーバーが、NLB インスタンスの TCP/SSL リスナーによって転送されたリクエストを正常に受信して処理できることを示します。
ブラウザのアドレスバーに
https://<サーバー証明書に関連付けられているドメイン名>を入力します。たとえば、https://www.example.comと入力します。表示されるダイアログボックスで、クライアント ID 検証用の証明書を選択し、[OK] をクリックします。
ブラウザのキャッシュのため、レイヤー 4 のロードバランシングを検証するたびに、ブラウザのシークレットモードまたはプライベートモードを使用してドメイン名にアクセスすることを推奨します。これにより、リクエストが両方の ECS インスタンスに分散されることを確認できます。


Linux クライアント
ルート証明書、サーバー証明書、クライアント証明書を保存している Linux クライアントにログインします。次のコマンドを実行して、NLB の相互認証を検証します。
sudo curl --cert /root/ca/client.crt --key /root/ca/client.key --cacert /root/ca/root.crt www.example.comwww.example.com は、NLB インスタンスのサーバー証明書に関連付けられたドメイン名です。
次の図に示すような応答メッセージを受信した場合、クライアントとサーバーが相互認証を完了し、リクエストが両方の ECS インスタンスに分散されていることを示します。
> [設定]