HTTPS 相互認証 (相互 TLS、mTLS) では、セキュアチャネルを確立する前に、サーバーとクライアントの両方が互いの ID を検証する必要があります。クライアントのみがサーバーを検証する片方向 HTTPS とは異なり、mTLS では、クライアントも信頼できる認証局 (CA) によって署名された有効な SSL/TLS 証明書を提示する必要があります。これにより、mTLS は金融、IoT、企業内サービス、公共サービスなど、既知の信頼できるクライアントにアクセスを制限し、中間者攻撃を防ぐ必要があるシナリオに適しています。
仕組み
| HTTPS 片方向認証 | HTTPS 相互認証 | |
|---|---|---|
| クライアントによるサーバーの検証 | はい | はい |
| サーバーによるクライアントの検証 | いいえ | はい |
| クライアントが保持するもの | — | ルート CA によって署名された SSL/TLS 証明書 |
| サーバーが保持するもの | サーバー証明書 | ルート CA 証明書 |
相互認証では、サーバーはルート CA 証明書を保持します。クライアントは、そのルート CA によって署名された SSL/TLS 証明書を保持します。接続が確立される前に、双方が互いを検証します。
前提条件
開始する前に、次のものが揃っていることを確認してください:
ALB リスナーに SSL/TLS 証明書が設定されていること。設定手順については、「HTTPS による暗号化通信のための証明書の設定」をご参照ください。
ルート CA 証明書。次のいずれかの方法で取得します:
Certificate Management Service コンソールでプライベート CA を購入する。詳細については、「プライベート CA の購入と有効化」をご参照ください。
「(オプション) 手順 1: 自己署名 CA 証明書の生成」の手順を使用して自己署名 CA 証明書を生成する。
(オプション) 手順 1: 自己署名 CA 証明書の生成
すでにルート CA 証明書をお持ちの場合は、この手順をスキップしてください。
秘密鍵を生成します:
openssl genrsa -out ca.key 4096証明書署名要求 (CSR) を作成します:
フィールド 必須 説明 Country Name はい 2 文字の国別コード、たとえば cnState or Province Name はい 省または自治区の名称 Locality Name はい 市区町村名 Organization Name はい 会社名または組織名 Organizational Unit Name はい 部署名 Common Name いいえ 一般的に使用される名前 Email Address いいえ 証明書管理者のメールアドレス A challenge password いいえ オプションの CSR セキュリティパスワード。不要な場合は空白のままにします openssl req -new -out ca.csr -key ca.keyOpenSSL によって、次のフィールドへの入力を求められます:
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 []:有効期間 3,650 日のルート CA 証明書を作成します:
ファイル 説明 ca.crtルート CA 証明書 ca.csrCSR ファイル ca.key秘密鍵 openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -CAcreateserial -days 3650lsを実行して、出力ファイルを確認します:ca.crt ca.csr ca.key
手順 2: CA 証明書のアップロード
ルート CA 証明書を Certificate Management Service にアップロードし、AlbConfig で使用する証明書 ID を取得します。
Certificate Management Service コンソールにログインします。 上部のナビゲーションバーで、リージョンドロップダウンリストから [中国本土以外] を選択します。 左側のナビゲーションウィンドウで、[証明書申請リポジトリ] をクリックします。
「[証明書申請リポジトリ]」ページで、「[リポジトリの作成]」をクリックします。「[リポジトリの作成]」パネルで、以下のパラメーターを設定し、「[OK]」をクリックします。
パラメーター 説明 リポジトリ名 リポジトリのカスタム名 データソース [CA 証明書のアップロード] を選択して、サードパーティの CA によって署名された証明書をアップロードします 作成したリポジトリをクリックします。リポジトリページで、[アップロード済み証明書] をクリックします。
「CA 情報」パネルで、以下のフィールドに情報を入力し、[確認して有効化] をクリックします。
パラメーター 説明 パッケージ名 証明書のカスタム名 CA 証明書 証明書の内容を貼り付けるか、または[ファイルをアップロードして解析] をクリックして証明書ファイルをアップロードしてください。 アップロードされた証明書の行の右側にある [詳細] をクリックし、証明書識別子を記録します。手順 4 で必要になります。
手順 3: クライアント証明書の生成
ルート CA 証明書を使用してクライアント証明書に署名します。
クライアントの秘密鍵を生成します:
openssl genrsa -out client.key 4096クライアント証明書の CSR を作成します:
openssl req -new -out client.csr -key client.key手順 1 と同じフィールドに入力します。値は CA 証明書の値と異なっていてもかまいません。
ルート CA を使用してクライアント証明書に署名します:
ファイル 説明 client.crtルート CA によって署名されたクライアント証明書 client.csrCSR ファイル client.keyクライアントの秘密鍵 openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650ca.crtとca.keyは、ステップ 1 で生成されたルート CA 証明書と秘密鍵です。lsを実行して出力ファイルを確認します:client.crt client.csr client.key
手順 4: 相互認証の有効化とテスト
相互認証の有効化
AlbConfig を開いて編集します:
kubectl edit albconfig <ALBCONFIG_NAME><ALBCONFIG_NAME>を AlbConfig の名前に置き換えます。HTTPS リスナーの構成(ポート 443)で、
caEnabled: trueを追加し、caCertificates.CertificateIdを手順 2 で記録した証明書識別子に設定します。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: #... spec: config: #... listeners: - port: 443 protocol: HTTPS caEnabled: true # 相互認証を有効化 caCertificates: - CertificateId: 0e40dda998174723af39d37fcaf***** # 手順 2 で取得した証明書 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>caEnabledをfalseに設定します:apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: #... spec: config: #... listeners: - port: 443 protocol: HTTPS caEnabled: false # 相互認証を無効化 caCertificates: - CertificateId: 0e40dda998174723af39d37fcaf***** certificates: #...
次のステップ
リスナーで HTTP/3 を有効にするには、「QUIC リスナーを使用して HTTP/3 をサポートする」をご参照ください。
ALB インスタンスに WAF 保護を追加するには、「WAF が有効な ALB インスタンスを使用してアプリケーションを保護する」をご参照ください。