ALB で相互認証を有効にすると、接続を確立する前にクライアントとサーバーの両方が互いの身元を検証する必要があります。これにより、金融取引や医療などの高いセキュリティ要件が求められるシナリオにおいて、中間者攻撃や不正アクセスを防止できます。
機能概要
相互認証を使用する理由
ほとんどの Web アプリケーションでは、一方向認証を使用して HTTPS 接続を確立します。クライアントがサーバーの身元を検証し、正しいサーバーに接続していることを確認します。
より高いセキュリティが求められるアプリケーションでは、サーバーもクライアントの身元を検証する必要があります。相互認証により、承認されたクライアントのみがサービスにアクセスできるようになり、中間者攻撃や不正アクセスなどのリスクを軽減できます。
ユースケース
金融取引、医療、銀行、オンライン決済など、サーバーに加えてクライアントの身元を検証する必要があるあらゆるシナリオ。
クライアントを認証する必要がない場合は、相互認証を使用する必要はありません。
制限事項
Standard Edition および WAF-Enhanced Edition の ALB インスタンスのみが相互認証をサポートします。Basic Edition の ALB インスタンスはこの機能をサポートしていません。
HTTPS リスナーのみが相互認証をサポートします。QUIC リスナーおよび HTTP リスナーはこの機能をサポートしていません。
シナリオ例
ある企業がオンライン取引プラットフォームをデプロイしました。当初は一方向 HTTPS 認証のみを使用していましたが、承認されていないデバイスがシステムへのアクセスを試みていたため、データ漏洩やトランザクション改ざんのリスクが生じていました。トラフィックの増加に伴い、プラットフォームはピーク時のパフォーマンスの負荷にも直面していました。
これらの問題に対処するため、企業は ALB インスタンスをデプロイし、相互認証を有効にしました。
ALB はクライアント要求をバックエンドサーバーに分散し、同時実行性が高いピーク時でも安定したパフォーマンスと高速な応答時間を確保します。
相互認証を有効にすることで、すべてのクライアントが接続を確立するために有効な証明書を提供する必要があるため、不正アクセスを防止し、データ漏洩やトランザクション改ざんのリスクを軽減します。
前提条件
証明書管理サービスでサーバー証明書を購入またはアップロード済みである必要があります。
このトピックでは、Alibaba Cloud の証明書管理サービスコンソールから購入したサーバー証明書を例として使用します。
説明SSL 証明書を購入する際は、ドメイン名にバインドする必要があります。有効でアクセス可能なドメイン名を用意してください。
相互認証を行う場合、CA 証明書も必要です。Certificate Management Service でサブ CA 証明書を購入・有効化済み(証明書クォータの確保が必要)または自己署名ルート CA またはサブ CA 証明書をアップロード済みである必要があります。
VPC を作成し (VPC1)、VPC1 内に 2 つの ECS インスタンスを作成済みである必要があります (ECS01 と ECS02)。両方のインスタンスにアプリケーションサービスがデプロイされています。
この例では、オペレーティングシステムとして Alibaba Cloud Linux 3 を使用し、Nginx を使用して HTTPS サービスを構成します。
標準エディションまたは WAF 有効化エディションの ALB インスタンスの作成が完了していること。
サーバーグループを作成し、ECS01 と ECS02 をバックエンドサーバーとして追加済みである必要があります。
ALB インスタンスをバックエンドサーバーと HTTPS 経由で通信させる場合は、サーバーグループを作成する際にバックエンドプロトコルとして HTTPS を選択し、バックエンドサーバーに HTTPS サービスがデプロイされていることを確認してください。
操作手順
ステップ 1: クライアント証明書の設定
クライアント証明書を準備してエクスポートする必要があります。
このトピックでは、CA 証明書を取得する 2 つの方法について説明します。証明書管理サービスで CA 証明書を購入してクライアント証明書を申請するか、自己署名 CA 証明書を証明書管理サービスにアップロードできます。
1. クライアント証明書の準備
コンソールから
詳細については、「プライベート証明書の申請」をご参照ください。
Certificate Management Service コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。 [PCA 証明書管理] ページで、PCA が存在するリージョンを選択します。
プライベート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 名前解決の設定
本番環境では、カスタムドメイン名を ALB インスタンスの DNS 名にマッピングする CNAME レコードを作成することを推奨します。
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 に設定することで、相互認証を有効にできます。