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

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

最終更新日:Jun 27, 2025

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 相互認証を使用すると、信頼できるクライアントにのみサービスを公開できるため、中間者攻撃を防ぎ、サービス セキュリティを強化できます。

前提条件

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

次の手順を実行して、ルート CA 証明書を生成できます。

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

    openssl genrsa -out ca.key 4096
  2. 次のコマンドを実行して、証明書署名リクエスト (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 のセキュリティを強化するために使用されるパスワード。 この例では、パスワードは設定されていません。

  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] をクリックします。

    パラメーター

    説明

    リポジトリ名

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

    データ ソース

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

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

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

    パラメーター

    説明

    パッケージ名

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

    CA 証明書

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

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

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

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

    openssl genrsa -out client.key 4096
  2. 次のコマンドを実行して、クライアント証明書を作成するための 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 のセキュリティを強化するために使用されるパスワード。 この例では、パスワードは設定されていません。

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

    openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -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 に設定し、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:
            #...
  2. 相互認証をテストします。

    1. 次のコマンドを実行して Ingress をクエリします。

      kubectl get ingress

      予期される出力:

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

      HOSTS 列と ADDRESS 列の値を記録します。

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

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

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

      old

(オプション) ステップ 5:相互認証を無効にする

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

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

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: #...
    spec:
      config:
        #...
      listeners:
      - port: 443
        protocol: HTTPS
        caEnabled: false # 値を false に設定します。
        caCertificates:
        - CertificateId: 0e40dda998174723af39d37fcaf*****
        certificates:
          #...

参照