Application Load Balancer (ALB) で相互認証を有効にすると、クライアントとサーバーの両方が接続を確立する前に互いのアイデンティティを検証する必要があります。これにより、金融取引やヘルスケアなど、高いセキュリティが求められるシナリオで、中間者攻撃や不正アクセスを防ぐことができます。
機能概要
相互認証を使用する理由
ほとんどの Web アプリケーションでは、HTTPS 接続を確立するために 一方向認証 が使用されます。クライアントはサーバーのアイデンティティを検証し、正しいサーバーに接続していることを確認します。
より高いセキュリティを必要とするアプリケーションでは、サーバーもクライアントのアイデンティティを検証する必要があります。相互認証 により、許可されたクライアントのみがサービスにアクセスできるようになり、中間者攻撃や不正アクセスなどのリスクを軽減します。
ユースケース
金融取引、ヘルスケア、銀行、オンライン決済など、サーバーに加えてシステムのクライアントのアイデンティティを検証する必要があるすべてのシナリオが該当します。
クライアントを認証する必要がない場合は、相互認証を使用する必要はありません。
制限事項
Standard Edition と WAF-Enhanced Edition の ALB インスタンスのみが相互認証をサポートしています。Basic Edition の ALB インスタンスはこの機能をサポートしていません。
HTTPS リスナーのみが相互認証をサポートしています。QUIC リスナーと HTTP リスナーはこの機能をサポートしていません。
シナリオ例
ある企業は、当初一方向の HTTPS 認証のみを使用していたオンライン取引プラットフォームを導入しました。未承認のデバイスがシステムにアクセスしようとし、データ漏洩や取引改ざんのリスクをもたらしていました。トラフィックが増加するにつれて、プラットフォームはピーク時のパフォーマンスへの負荷も増大していました。
これらの問題に対処するため、企業は ALB インスタンスをデプロイし、相互認証を有効にしました。
ALB はクライアントリクエストをバックエンドサーバーに分散させ、同時実行数が多いピーク時でも安定したパフォーマンスと迅速な応答時間を保証します。
相互認証を有効にすると、すべてのクライアントは接続を確立するために有効な証明書を提供する必要があるため、不正アクセスを防ぎ、データ漏洩や取引改ざんのリスクを軽減します。
前提条件
証明書管理サービスでサーバー証明書を 購入 または アップロード していること。
このトピックでは、Alibaba Cloud の 証明書管理サービスコンソール から購入したサーバー証明書を例として使用します。
説明SSL 証明書を購入する際には、ドメイン名にバインドする必要があります。有効でアクセス可能なドメイン名があることを確認してください。
相互認証には、CA 証明書も必要です。下位 CA 証明書を購入して有効にする (利用可能な証明書クォータが必要) か、自己署名のルート CA または下位 CA 証明書を アップロード することができます。
VPC (VPC1) を 作成 し、VPC1 に 2 つの Elastic Compute Service (ECS) インスタンス (ECS01 と ECS02) を 作成 し、両方のインスタンスにアプリケーションサービスがデプロイされていること。
この例では、オペレーティングシステムとして Alibaba Cloud Linux 3 を使用し、Nginx を使用して HTTPS サービスを設定します。
-
ALB インスタンスが作成されていること。相互認証または SM 証明書を使用するには、インスタンスのエディションが Standard Edition または WAF-enabled Edition である必要があります。
サーバーグループを作成 し、ECS01 と ECS02 をバックエンドサーバーとして追加していること。
ALB インスタンスをバックエンドサーバーと HTTPS で通信させる場合は、サーバーグループを作成する際にバックエンドプロトコルとして HTTPS を選択し、バックエンドサーバーに HTTPS サービスがデプロイされていることを確認してください。
操作手順
ステップ 1:クライアント証明書の設定
クライアント証明書を準備してエクスポートする必要があります。
このトピックでは、CA 証明書を取得する 2 つの方法について説明します。証明書管理サービスで CA 証明書を 購入 してクライアント証明書を申請するか、自己署名 CA 証明書を証明書管理サービスに アップロード することができます。
1. クライアント証明書の準備
コンソールから
詳細については、「プライベート証明書の申請」をご参照ください。
Certificate Management Service コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。 [PCA 証明書管理] ページで、PCA が存在するリージョンを選択します。
プライベートca タブで、対象の中間CAを見つけ、操作 列のアプリケーション証明書 をクリックします。
アプリケーション証明書 パネルで、以下の表に従って証明書の設定を行い、申請の確認 をクリックします。
この例では、クライアント証明書を申請する際に、証明書のタイプ を クライアント証明書 に設定し、氏名 を入力してクライアントユーザーを一意に識別します。その他のパラメーターは、デフォルト値のままにするか、必要に応じて変更できます。
申請を送信すると、プライベート CA は直ちに証明書を発行します。その後、中間CAの操作 列にある証明書リスト をクリックして、発行された証明書を表示できます。
自己署名
ECS01 にログオンし、次のコマンドを実行して自己署名ルート CA 証明書を生成します。
ALB インスタンスは、自己署名ルート CA 証明書または自己署名中間 CA 証明書を使用した相互認証をサポートしています。 この例では、自己署名ルート CA 証明書を使用します。
次のコマンドを実行して、ルート CA 証明書の秘密キーを作成します:
openssl genrsa -out root.key 4096次のコマンドを実行して、ルート CA 証明書の証明書署名要求 (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****@example.com A challenge password []: An optional company name []:次のコマンドを実行して、ルート CA 証明書を作成します:
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 = a****@example.com Getting Private Keylsコマンドを実行して、生成されたルート CA 証明書root.crtとその秘密鍵root.keyを表示します。これらのルート CA 証明書ファイルは、後で使用するためにコンピューターに ダウンロード できます。
自己署名ルート CA 証明書を証明書管理サービスにアップロードします。
Certificate Management Service コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。
証明書アプリケーションリポジトリ ページで、[リポジトリの作成] をクリックします。[リポジトリの作成] パネルで、[データソース] を [アップロードされた CA 証明書] に設定し、OK をクリックします。
証明書アプリケーションリポジトリ ページで、作成したリポジトリをクリックします。
証明書 ページで、作成 をクリックします。[CA 情報] パネルで、ルート CA 証明書ファイル
root.crtをアップロードし、[確認して有効化] をクリックします。
2. クライアント証明書のエクスポート
コンソールからエクスポート
コンソールから購入したクライアント証明書を相互認証に使用するには、次の手順に従ってエクスポートします:
プライベートca タブで、対象の下位 CA を見つけ、操作 列の 証明書リスト をクリックします。
証明書リスト ページで、対象のプライベート証明書を探し、操作 列の ダウンロード をクリックします。
証明書のダウンロード ダイアログボックスで、ダウンロードする証明書の形式を選択し、確認してダウンロードする をクリックします。信頼チェーンを含める を選択した場合、ダウンロードされた証明書には完全な証明書チェーンが含まれます。
この例では、証明書形式として [PFX] を選択します。この形式はブラウザで認識できます。
ダウンロードしたファイルには、
.pfx拡張子のクライアント証明書ファイルと、クライアントの秘密鍵の暗号化パスワードが記載された.txt拡張子のテキストファイルが含まれています。
自己署名のエクスポート
自己署名 CA 証明書から生成されたクライアント証明書を相互認証に使用するには、次の手順に従って生成します:
ECS01 にログオンし、次の手順を実行してクライアント証明書を生成します:
次のコマンドを実行して、クライアント証明書の秘密キーを生成します:
openssl genrsa -out client.key 4096次のコマンドを実行して、クライアント証明書の CSR を生成します:
openssl req -new -out client.csr -key client.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) []:client-alb-user Email Address []:username@example.com A challenge password []: An optional company name []:次のコマンドを実行して、クライアント証明書を生成します。
openssl x509 -req -in client.csr -out client.crt -CA root.crt -CAkey root.key -CAcreateserial -days 3650次の出力が返されます。
Signature ok subject=C = cn, ST = bj, L = bj, O = alibaba, OU = test, CN = client-alb-user, emailAddress = username@example.com Getting CA Private Key次のコマンドを実行して、生成されたクライアント証明書
client.crtを、ブラウザで認識できる PKCS12 ファイルに変換します。プロンプトに従ってクライアント秘密鍵の暗号化パスワードを入力します。openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12lsコマンドを実行して、生成されたclient.p12クライアント証明書ファイルを表示します。クライアント証明書ファイルは、後でクライアントで使用するためにコンピューターに ダウンロード できます。
ステップ 2:相互認証リスナーの設定
ALB コンソールのトップナビゲーションバーで、ALB インスタンスがデプロイされているリージョンを選択します。インスタンス ページで、管理する ALB インスタンスを見つけ、その ID をクリックします。
インスタンス詳細ページで、リスナー タブをクリックし、リスナーの作成 をクリックします。パラメーターを設定し、次のステップ をクリックします。
この例では、リスナープロトコルの選択 を HTTPS に、リスニングポート を 443 に設定します。その他の HTTPS リスナーパラメーターのデフォルト値を維持するか、必要に応じて変更できます。
SSL 証明書の設定 ステップで、購入したサーバー証明書を選択します。 次に、相互認証の有効化 をオンにし、CA 証明書ソースと対応する証明書を選択します。 最後に、TLS セキュリティポリシーを選択し、次のステップ をクリックします。
CA 証明書ソース を Alibaba Cloud に設定します。デフォルトの CA 証明書 ドロップダウンリストで、手順 1:クライアント証明書を設定する で申請した CA 証明書を選択します。
CA 証明書ソース を サードバーティ に設定します。デフォルトの CA 証明書 ドロップダウンリストから、手順 1: クライアント証明書を設定する でアップロードした自己署名 CA 証明書を選択します。
サーバーグループ ステップで、サーバータイプ とバックエンドの サーバータイプ を選択します。バックエンドサーバー ECS01 と ECS02 の情報を確認し、次のステップ をクリックします。
確定 ステップで、設定を確認し、送信 をクリックします。
ステップ 3:DNS 設定
本番環境では、CNAME レコードを作成して、カスタムドメイン名を ALB インスタンスの DNS 名にマッピングすることを推奨します。
ALB コンソールの左側のナビゲーションペインで、を選択します。インスタンス ページで、作成された ALB インスタンスの DNS 名をコピーします。
次の手順を実行して CNAME レコードを追加します。
[DNS 解決] ページで、対象のカスタムドメイン名を見つけ、操作 列の [DNS 設定] をクリックします。
説明ドメイン名が Alibaba Cloud に登録されていない場合は、DNS 設定を行う前に、まず Alibaba Cloud DNS コンソールに ドメイン名を追加する 必要があります。
DNS 設定ページで、[DNS レコードの追加] をクリックし、CNAME レコードを設定して、OK をクリックします。
この例では、[レコードタイプ] を [CNAME] に、[レコード値] を ALB インスタンスの DNS 名に設定します。その他の DNS レコードパラメーターはデフォルト値のままにするか、必要に応じて変更できます。
ステップ 4:相互認証のテスト
この例では、Windows クライアントと Chrome ブラウザを使用します。
エクスポートされたクライアント証明書をクライアント端末にインストールします。
ダウンロードしたクライアント証明書ファイルをダブルクリックし、証明書インポートウィザードのプロンプトに従ってクライアント証明書をインストールします。
ブラウザで
https://<カスタムドメイン名>を入力します。表示されるダイアログボックスで、クライアント認証に使用する証明書を選択します。ブラウザを更新します。クライアントリクエストが ECS01 サーバーと ECS02 サーバーの間で分散されることを確認できます。
ページが Hello World ! This is ECS01. を返した場合、リクエストは ECS01 に転送されます。
ページを更新して Hello World ! This is ECS02. が返された場合、リクエストは ECS02 に転送されます。
関連ドキュメント
コンソール操作
ALB 関連情報:
証明書関連情報:
関連 API
以下の API 操作を呼び出し、CaEnabled パラメーターを true に設定することで、相互認証を有効にできます。