すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:HTTPS相互認証を使用してサービスのセキュリティを強化する

最終更新日:Dec 10, 2024

HTTPS相互認証メカニズムは、サーバーとクライアントが互いの身元を確認できるようにします。 HTTPS相互認証を使用して、プライバシー保護を伴う金融、IoT、企業内部サービス、または公共サービス部門、またはサービスが特定のクライアントにのみ公開されるシナリオでサービスセキュリティを保証できます。

HTTPS一方向認証とHTTPS相互認証の比較

  • HTTPS一方向認証: クライアントはサーバーからSSLまたはTLS証明書をダウンロードしてサーバーのIDを確認し、安全なチャネルを確立します。 サーバーはクライアントのIDを検証できません。

  • HTTPS相互認証: クライアントはサーバーからSSLまたはTLS証明書をダウンロードして、サーバーのIDを確認します。 一方、クライアントは、そのIDの証明として、そのSSLまたはTLS証明書をサーバに送信する。 セキュア・チャネルは、クライアントとサーバが互いのアイデンティティを検証した後にのみ確立される。 ほとんどの場合、サーバーはルートCA証明書を保持し、クライアントはルートCA証明書に基づいて署名および発行されたSSLまたはTLS証明書を保持します。 したがって、サーバは、クライアントのアイデンティティを検証することができる。 HTTPS相互認証を使用すると、信頼できるクライアントにのみサービスを公開できます。これにより、man-in-the-middle攻撃を防ぎ、サービスのセキュリティを強化できます。

前提条件

(オプション) ステップ1: 自己署名CA証明書の生成

ルートCA証明書を生成するには、次の手順を実行します。

  1. 次のコマンドを実行して、秘密鍵を作成します。

    openssl genrsa -out ca.key 4096
  2. 次のコマンドを実行して、証明書署名要求 (CSR) を作成します。

    openssl req -new -out ca.csr -key ca.key

    上記のコマンドを実行した後、証明書情報を指定します。 次のサンプルコードブロックは、パラメーターとサンプル値を示しています。

    国名 (2文字コード) [XX]:cn
    州または州名 (フルネーム) []:bj
    地域名 (例、都市) [デフォルトの都市]:bj
    組織名 (例えば、会社) [Default company Ltd]:alibaba
    組織単位名 (例、セクション) []:test
    共通名 (例: あなたの名前またはサーバーのホスト名) []:root
    メールアドレス []:a.alibaba.com
    チャレンジパスワード []: 

    下表に、各パラメーターを説明します。

    パラメーター

    必須/任意

    説明

    国名

    必須

    国コード。通常、cn (中国) などの2文字で構成されます。

    州または省名

    必須

    州または自治区の名前。

    ローカリティ名

    必須

    都市の名前。

    組織名

    必須

    組織の名前 (会社名など) 。

    組織単位名

    必須

    部門の名前。

    共通名

    任意

    よく使われる名前。

    電子メールアドレス

    任意

    証明書管理者への連絡に使用されるメールアドレス。

    チャレンジパスワード

    任意

    CSRのセキュリティを強化するために使用されるパスワード。 この例では、パスワードは設定されていません。

  3. 次のコマンドを実行して、ルートCA証明書を作成します。

    openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -CAcreateserial -days 3650

    上記の操作を実行した後、lsコマンドを実行して、カレントディレクトリのルート証明書の秘密鍵ファイルと証明書ファイルを表示します。

    ca.crt ca.csr ca.key

    ca.crtはルートCA証明書ファイル、ca.csrはCSRファイル、ca.keyは秘密鍵ファイルです。

ステップ2: 証明書のアップロード

  1. 証明書管理サービスコンソールにログインします。 左側のナビゲーションウィンドウで、[証明書アプリケーションリポジトリ] をクリックします。

  2. [証明書アプリケーションリポジトリ] ページで、[リポジトリの作成] をクリックします。 [リポジトリの作成] パネルで、次のパラメーターを設定し、[OK] をクリックします。

    パラメーター

    説明

    リポジトリ名

    リポジトリの名前。 カスタム名を指定できます。

    データソース

    [Upload CA Certificates] を選択して、サードパーティの認証局によって署名および発行されたプライベート証明書をアップロードします。

  3. [証明書アプリケーションリポジトリ] ページで、作成したリポジトリをクリックします。 [証明書の管理] ページで、[証明書のアップロード] をクリックします。

  4. [CA情報] パネルで、次の表に基づいてパラメーターを設定し、手順3で作成したCA証明書をアップロードし、[確認して有効にする] をクリックします。

    パラメーター

    説明

    パッケージ名

    アップロードする証明書のカスタム名を入力します。

    CA証明書

    プライベート証明書ファイルの内容を入力するか、[アップロード] を選択して証明書ファイルをアップロードします。

  5. 証明書の右側にある [詳細] をクリックし、証明書識別子を記録します。

ステップ3: ルートCA証明書を使用してクライアント証明書を生成する

  1. 次のコマンドを実行して、クライアント証明書の秘密鍵を生成します。

    openssl genrsa -out client.key 4096
  2. 次のコマンドを実行して、クライアント証明書を作成するためのCSRを生成します。

    openssl req -new -out client.csr -key client.key

    上記のコマンドを実行した後、証明書情報を指定します。 次のサンプルコードブロックは、パラメーターとサンプル値を示しています。

    国名 (2文字コード) [XX]:cn
    州または州名 (フルネーム) []:bj
    地域名 (例、都市) [デフォルトの都市]:bj
    組織名 (例えば、会社) [Default company Ltd]:alibaba
    組織単位名 (例、セクション) []:test
    共通名 (例: あなたの名前またはサーバーのホスト名) []:root
    メールアドレス []:a.alibaba.com
    チャレンジパスワード []: 

    下表に、各パラメーターを説明します。

    パラメーター

    必須/任意

    説明

    国名

    必須

    国コード。通常、cn (中国) などの2文字で構成されます。

    州または省名

    必須

    州または自治区の名前。

    ローカリティ名

    必須

    都市の名前。

    組織名

    必須

    組織の名前 (会社名など) 。

    組織単位名

    必須

    部門の名前。

    共通名

    任意

    よく使われる名前。

    電子メールアドレス

    任意

    証明書管理者への連絡に使用されるメールアドレス。

    チャレンジパスワード

    任意

    CSRのセキュリティを強化するために使用されるパスワード。 この例では、パスワードは設定されていません。

  3. 次のコマンドを実行して、クライアント証明書を生成します。

    openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key-CAreateserial-days 3650

    ca.crtca.keyは、ルートCA証明書ファイルと秘密鍵ファイルです。

  4. 上記の操作を実行した後、lsコマンドを実行して、現在のディレクトリに生成されたクライアント証明書を表示します。

    client.crt client.csr client.key

    client.crtはルートCA証明書に基づいて署名されたクライアント証明書ファイル、client.csrはCSRファイル、client.keyはクライアント秘密鍵ファイルです。

ステップ4: 相互認証の有効化とテスト

  1. HTTPSリスナーの相互認証を有効にします。

    1. 次のコマンドを実行して、AlbConfigを変更します。

      kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> をAlbConfigの名前に置き換えます。
    2. caEnabledフィールドをHTTPSリスナーに追加してtrueに設定し、caCertificateIdフィールドをリスナーに追加して、ステップ2で取得したルートCA証明書の識別子に設定します。

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      メタデータ:
        name: #...
      spec:
        config:
          #...
        リスナー:
        - port: 443
          protocol: HTTPS
          caEnabled: true# caEnabledフィールドを追加し、値をtrueに設定します。
          caCertificates:
          -CertificateId: 0e40dda998174723af39d37fcaf *****# 手順2で取得したルートCA証明書の識別子を指定します。
          証明書:
            #...
  2. 相互認証をテストします。

    1. 次のコマンドを実行して、Ingress情報を表示します。

      kubectl get ingress

      期待される出力:

      NAME CLASS HOSTS ADDRESS PORTS AGE
      https-ingressclass https-ingressclass demo.alb.ingress.top alb-******* .alb.aliyuncs.com 80, 443 83m 

      HOSTSおよびADDRESSの下の値をコピーして、後で使用します。

    2. 次のコマンドを実行して、このトピックのクライアント証明書と秘密鍵を使用してサービスにアクセスします。 demo.alb.ingress.topおよびalb-******** .alb.aliyuncs.comを前の手順で取得した値に置き換えます。

      curl -Hホスト: demo.alb.ingress.top -k https:// alb-******** .alb.aliyuncs.com -- cert client.crt -- key client.key

      次の出力が返された場合、相互認証が設定されます。

      古い

(オプション) ステップ5: 相互認証の無効化

  1. 次のコマンドを実行して、AlbConfigを変更します。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> をAlbConfigの名前に置き換えます。
  2. 相互認証を無効にするには、caEnabledフィールドをfalseに設定します。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    メタデータ:
      name: #...
    spec:
      config:
        #...
      リスナー:
      - port: 443
        protocol: HTTPS
        caEnabled: false# 値をfalseに設定します。
        caCertificates:
        -CertificateId: 0e40dda998174723af39d37fcaf *****
        証明書:
          #...

関連ドキュメント