金融取引、ヘルスケア、銀行、オンライン決済などのセキュリティ要件の高いシナリオでは、従来の一方向認証 (サーバーの ID のみを確認する) ではセキュリティ要件が不足します。 デフォルトでは、サーバーは接続するすべてのクライアントを信頼するため、中間者攻撃や不正アクセスなどのリスクにさらされる可能性があります。 セキュリティを強化するために、Anti-DDoS Proxy の相互認証機能を使用できます。 このプロセスでは、クライアントとサーバーの両方で、接続を確立する前に互いの ID を検証する必要があります。 双方が認証された後にのみ、データ転送のための安全な通信チャネルを作成できます。 このトピックでは、相互認証を構成する方法について説明します。
はじめに
相互認証が必要な理由
ほとんどのインターネット Web アプリケーションは、多様なクライアントがアクセスすることを歓迎しています。 これらのアプリケーションでは、一方向の HTTPS 認証のみが必要です。クライアントは、アプリケーションと対話する前にサーバー ID を検証し、有効なサーバーに接続していることを確認します。
ただし、より高いレベルのセキュリティが必要なシナリオでは、サーバー ID を検証する必要があるだけでなく、クライアント認証も必要です。 この場合、相互認証が役立ちます。 承認されたクライアントのみがサーバーにアクセスできるようにすることで、中間者攻撃や不正アクセスなどのセキュリティリスクを軽減します。
一方向認証と相互認証の比較
比較項目 | 一方向認証 | 相互認証 |
関連する証明書ファイル | サーバー証明書: | サーバー証明書: クライアント証明書: ルート CA 証明書
|
ハンドシェイクプロセス |  |  |
シナリオ
金融取引、ヘルスケア、銀行、IoT、オンライン決済など、セキュリティ要件の高いビジネスシナリオでは、クライアントがサーバー ID を検証することに加えて、サーバーもクライアント ID を検証する必要があります。
クライアント認証が不要な場合は、相互認証は不要です。
例
DDoS 攻撃防御のために Anti-DDoS Proxy を利用する電子政府サービスプラットフォームは、攻撃者が政府ドメインになりすましたり、フィッシング Web サイトを使用してユーザーを誤解させたりして、情報漏洩につながる可能性を防ぐために、相互認証を構成する必要があります。 また、悪意のあるユーザーが自動ツールを使用して公開インターフェイスをクロールするのを防ぎます。

ステップ 1: CA 証明書を作成し、クライアント証明書を生成する
方法 1: Alibaba Cloud が発行した CA 証明書を使用してクライアント証明書を生成する
クライアント証明書を申請するには、プライベート証明書の申請を参照してください。
プライベート CA を購入して有効化する。
説明 プライベート CA では、プライベートルート CA に 1 つ以上のプライベート中間 CA を含めることができます。 プライベート中間 CA のみが、サーバー証明書とクライアント証明書を含むプライベート証明書を発行できます。
プライベート中間 CA を使用してクライアント証明書を申請する。
Certificate Management Service コンソールにログインし、左側のナビゲーションウィンドウで、 を選択します。
プライベートca タブで、ターゲットの中間 CA を見つけ、操作 列で アプリケーション証明書 をクリックします。

アプリケーション証明書 パネルで、証明書の構成を完了し、申請の確認 をクリックします。
このシナリオでは、証明書タイプ に クライアント証明書 を選択し、氏名 にクライアントユーザーの一意の識別子を入力します。 その他のパラメーターについてはデフォルト値を維持するか、必要に応じて変更できます。
証明書の申請を送信すると、プライベート証明書がすぐに発行されます。 その後、操作 列の 証明書リスト をクリックして、プライベート証明書に関する情報を表示できます。
クライアント証明書をエクスポートする。
プライベートca タブで、必要なプライベート証明書が発行されたプライベート中間 CA を見つけ、操作 列の 証明書リスト をクリックします。
証明書リスト ページで、ダウンロードするプライベート証明書を見つけて、操作 列の ダウンロード をクリックします。
証明書のダウンロード ダイアログボックスで、[証明書フォーマット] パラメーターを構成し、確認してダウンロードする をクリックします。 信頼チェーンを含める をオンにすると、ダウンロードされる証明書には完全な証明書チェーンが含まれます。 次の表に、証明書フォーマットを示します。
このシナリオでは、証明書フォーマットにブラウザで認識できる [PFX] を選択します。
次の図に示すように、ダウンロードされた証明書ファイルには、拡張子が .pfx のクライアント証明書ファイルと、拡張子が .txt のクライアント秘密鍵の暗号化パスワードが含まれています。

方法 2: Alibaba Cloud 以外が発行した CA 証明書を使用してクライアント証明書を生成する
自己署名ルート CA 証明書または自己署名中間 CA 証明書は、相互認証でサポートされています。 このトピックでは、自己署名ルート CA 証明書を例として使用します。
OPENSSL を使用して自己署名ルート CA 証明書を生成する。
次のコマンドを使用して、ルート CA 証明書の秘密鍵を作成します。
openssl genrsa -out root.key 4096
次のコマンドを使用して、ルート CA 証明書をリクエストするためのファイルを作成します。
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
出力例:

ls コマンドを使用して、生成されたルート CA 証明書 root.crt とルート CA 証明書の秘密鍵 root.key を確認します。
後で Certificate Management Service にアップロードできるように、これらのルート CA 証明書ファイルをローカルコンピューターに ダウンロード します。
ルート CA 証明書を使用してクライアント証明書を生成する。
次のコマンドを使用して、クライアント証明書キーを生成します。
openssl genrsa -out client.key 4096
次のコマンドを使用して、クライアント証明書をリクエストするためのファイルを作成します。
openssl req -new -out client.csr -key client.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) []: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
出力例:

次のコマンドを使用して、生成されたクライアント証明書 client.crt を、ブラウザで認識できる PKCS12 ファイルに変換します。 プロンプトに従って、設定したクライアント秘密鍵の暗号化パスワードを入力します。
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
ls コマンドを使用して、生成された client.p12 クライアント証明書ファイルを確認します。
後でクライアントに送信できるように、クライアント証明書ファイルをローカルコンピューターに ダウンロード します。
自己署名ルート CA 証明書を Alibaba Cloud Certificate Management Service にアップロードする。
Certificate Management Service コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[証明書アプリケーションリポジトリ] ページで、[リポジトリの作成] をクリックします。 パネルで、[データソース] を [CA 証明書のアップロード] に設定し、[OK] をクリックします。

[証明書アプリケーションリポジトリ] ページで、作成した証明書リポジトリをクリックします。
注:[公式証明書] ページで、[アップロードされた証明書] をクリックします。 [CA 情報] パネルで、ルート CA 証明書ファイル root.crt をアップロードし、[確認して有効化] をクリックします。
ステップ 2: Anti-DDoS Proxy にドメインを追加し、相互認証を有効にする
Anti-DDoS Proxy コンソールの Web サイト設定 ページにログインします。
上部のナビゲーションバーで、インスタンスのリージョンを選択します。
ドメイン接続 ページで、ドメインの追加 をクリックし、指示に従ってドメインを追加します。
このトピックでは、相互認証を有効にする方法のみについて説明します。 その他の構成項目については、Web サイトの追加を参照してください。
HTTPS プロトコル関連の構成エリアで、Mutual Authentication を選択し、証明書ソースに基づいて CA 証明書を選択します。
構成が完了したら、Anti-DDoS Proxy の CNAME アドレスをコピーします。
ステップ 3: ドメイン名解決を構成する
ビジネスシナリオでは、独自のドメイン名を使用して、CNAME 解決を通じて Anti-DDoS Proxy の CNAME アドレスにポイントすることをお勧めします。
次の例では、Alibaba Cloud DNSでホストされている DNS を持つドメインを使用します。 これは、他の DNS サービスプロバイダーのドメイン名解決サービスを使用する場合の参考情報です。
Alibaba Cloud DNS コンソールにログインします。
[権威 DNS 解決] ページで、ターゲットのドメイン名を見つけて、[アクション] 列の [DNS 設定] をクリックします。
[DNS 設定] ページで、変更する DNS レコードを見つけて、[アクション] 列の [編集] をクリックします。
説明 操作する DNS レコードがレコードリストにない場合は、[DNS レコードの追加] をクリックできます。
このシナリオでは、[レコードタイプ] を [CNAME] に設定し、[レコード値] を Anti-DDoS Proxy の CNAME アドレスに設定します。他のパラメーターについてはデフォルト値を保持するか、必要に応じて変更できます。
[OK] をクリックし、変更された DNS 設定が有効になるまで待ちます。
ステップ 4: クライアント証明書をクライアントに送信する
ヒント: JavaScript で REST API を使用するときは、認証が必要になる場合があります。
手順 1 で作成したクライアント証明書をクライアントにインストールします。
ダウンロードしたクライアント証明書ファイルをダブルクリックし、システム証明書のインポートプロンプトに従って、クライアント証明書のインストールを完了します。
ブラウザで、https://<your domain name> と入力します。 ダイアログボックスが表示されたら、クライアントID 検証用の証明書を選択します。
ブラウザを更新し、クライアントがドメインにアクセスできるかどうかを確認します。