HTTPS 相互認証メカニズムは、サーバーとクライアントが相互の ID を検証できるようにします。 プライバシー保護が必要な金融、IoT、企業内部サービス、公共サービス セクター、または特定のクライアントにのみサービスを公開するシナリオでは、HTTPS 相互認証を使用してサービス セキュリティを保証できます。
HTTPS 片方向認証と HTTPS 相互認証の比較
HTTPS 片方向認証:クライアントはサーバーから SSL または TLS 証明書をダウンロードしてサーバーの ID を検証し、セキュア チャネルを確立します。 サーバーはクライアントの ID を検証できません。
HTTPS 相互認証:クライアントはサーバーから SSL または TLS 証明書をダウンロードしてサーバーの ID を検証します。 一方、クライアントは ID の証明としてサーバーに SSL または TLS 証明書を送信します。 セキュア チャネルは、クライアントとサーバーが相互の ID を検証した後にのみ確立されます。 ほとんどの場合、サーバーはルート CA 証明書を保持し、クライアントはルート CA 証明書に基づいて署名および発行された SSL または TLS 証明書を保持します。 したがって、サーバーはクライアントの ID を検証できます。 HTTPS 相互認証を使用すると、信頼できるクライアントにのみサービスを公開できるため、中間者攻撃を防ぎ、サービス セキュリティを強化できます。
前提条件
HTTPS での暗号化通信用の証明書を設定するの手順に従って、SSL または TLS 証明書が設定されていること。
ルート CA 証明書を取得していること。 ルート CA 証明書は、次のいずれかの方法で取得できます。
証明書管理サービス コンソールで購入する。 詳細については、「プライベート CA を購入して有効化する」をご参照ください。
(オプション) (オプション) ステップ 1:自己署名 CA 証明書を生成するの手順に従って、自己署名証明書を生成する。
(オプション) ステップ 1:自己署名 CA 証明書を生成する
次の手順を実行して、ルート CA 証明書を生成できます。
次のコマンドを実行して、秘密鍵を作成します。
openssl genrsa -out ca.key 4096次のコマンドを実行して、証明書署名リクエスト (CSR) を作成します。
openssl req -new -out ca.csr -key ca.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) []:root Email Address []:example@ali A challenge password []:次の表に、パラメーターを示します。
パラメーター
必須
説明
Country Name
はい
国コード。通常は cn (中国) などの 2 文字で構成されます。
State or Province Name
はい
省または自治区の名前。
Locality Name
はい
市町村名。
Organization Name
はい
組織名 (会社名など)。
Organizational Unit Name
はい
部署名。
Common Name
いいえ
一般的に使用される名前。
Email Address
いいえ
証明書管理者に連絡するために使用されるメール アドレス。
A challenge password
いいえ
CSR のセキュリティを強化するために使用されるパスワード。 この例では、パスワードは設定されていません。
次のコマンドを実行して、ルート CA 証明書を作成します。
openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -CAcreateserial -days 3650上記操作の実行後、
lsコマンドを実行して、現在のディレクトリにあるルート証明書の秘密鍵ファイルと証明書ファイルを表示します。ca.crt ca.csr ca.keyca.crtはルート CA 証明書ファイル、ca.csrは CSR ファイル、ca.keyは秘密鍵ファイルです。
ステップ 2:証明書をアップロードする
証明書管理サービス コンソール にログインします。 上部のナビゲーション バーにあるリージョン ドロップダウン リストから [中国本土以外] を選択します。 左側のナビゲーション ウィンドウで、[証明書アプリケーション リポジトリ] をクリックします。
[証明書アプリケーション リポジトリ] ページで、[リポジトリの作成] をクリックします。 [リポジトリの作成] パネルで、次のパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
リポジトリ名
リポジトリの名前。 カスタム名を指定できます。
データ ソース
[CA 証明書のアップロード] を選択して、サードパーティの認証局によって署名および発行されたプライベート証明書をアップロードします。
[証明書アプリケーション リポジトリ] ページで、作成したリポジトリをクリックします。 次に、[アップロードされた証明書] をクリックします。
[CA 情報] パネルで、次の表に基づいてパラメーターを設定して、ステップ 3 で作成した CA 証明書をアップロードし、[確認して有効化] をクリックします。
パラメーター
説明
パッケージ名
アップロードする証明書のカスタム名を入力します。
CA 証明書
プライベート証明書ファイルの内容を入力するか、[ファイルをアップロードして解析] をクリックして証明書ファイルをアップロードします。
証明書の右側にある [詳細] をクリックし、証明書 ID を記録します。
ステップ 3:ルート CA 証明書を使用してクライアント証明書を生成する
次のコマンドを実行して、クライアント証明書の秘密鍵を生成します。
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) []:root Email Address []:example@ali A challenge password []:次の表に、パラメーターを示します。
パラメーター
必須
説明
Country Name
はい
国コード。通常は cn (中国) などの 2 文字で構成されます。
State or Province Name
はい
省または自治区の名前。
Locality Name
はい
市町村名。
Organization Name
はい
組織名 (会社名など)。
Organizational Unit Name
はい
部署名。
Common Name
いいえ
一般的に使用される名前。
Email Address
いいえ
証明書管理者に連絡するために使用されるメール アドレス。
A challenge password
いいえ
CSR のセキュリティを強化するために使用されるパスワード。 この例では、パスワードは設定されていません。
次のコマンドを実行して、クライアント証明書を生成します。
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650ca.crtとca.keyは、ルート CA 証明書ファイルと秘密鍵ファイルです。上記操作の実行後、
lsコマンドを実行して、現在のディレクトリに生成されたクライアント証明書を表示します。client.crt client.csr client.keyclient.crtはルート CA 証明書に基づいて署名されたクライアント証明書ファイル、client.csrは CSR ファイル、client.keyはクライアント秘密鍵ファイルです。
ステップ 4:相互認証を有効化してテストする
HTTPS リスナーの相互認証を有効にします。
次のコマンドを実行して、AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。caEnabledフィールドを HTTPS リスナーに追加してtrueに設定し、caCertificates.CertificateIdフィールドをリスナーに追加して ステップ 2 で取得したルート CA 証明書の ID に設定します。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: #... spec: config: #... listeners: - port: 443 protocol: HTTPS caEnabled: true # caEnabled フィールドを追加し、値を true に設定します。 caCertificates: - CertificateId: 0e40dda998174723af39d37fcaf***** # ステップ 2 で取得したルート CA 証明書の ID を指定します。 certificates: #...
相互認証をテストします。
次のコマンドを実行して Ingress をクエリします。
kubectl get ingress予期される出力:
NAME CLASS HOSTS ADDRESS PORTS AGE https-ingress https-ingressclass demo.alb.ingress.top alb-********.alb.aliyuncs.com 80, 443 83mHOSTS列とADDRESS列の値を記録します。次のコマンドを実行して、このトピックのクライアント証明書と秘密鍵を使用してサービスにアクセスします。
demo.alb.ingress.topとalb-********.alb.aliyuncs.comを前のステップで取得した値に置き換えます。curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com --cert client.crt --key client.key次の出力が返された場合、相互認証が設定されています。
old
(オプション) ステップ 5:相互認証を無効にする
次のコマンドを実行して、AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。caEnabled フィールドを
falseに設定して、相互認証を無効にします。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: #... spec: config: #... listeners: - port: 443 protocol: HTTPS caEnabled: false # 値を false に設定します。 caCertificates: - CertificateId: 0e40dda998174723af39d37fcaf***** certificates: #...
参照
リスナーの HTTP/3 を有効にするには、「QUIC リスナーを使用して HTTP/3 をサポートする」をご参照ください。
Web サービスが侵入に対して脆弱である場合、またはより高いセキュリティが必要な場合は、WAF 対応 Application Load Balancer (ALB) インスタンスを使用できます。 詳細については、「WAF 対応 ALB インスタンスを使用してアプリケーションを保護する」をご参照ください。