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

Alibaba Cloud Service Mesh:イングレスゲートウェイでの TLS バージョンの強制

最終更新日:Mar 11, 2026

TLS 1.0 および TLS 1.1 には既知の脆弱性があり、HTTPS トラフィックが中間者攻撃やデータ侵害にさらされる可能性があります。これらのリスクを軽減するために、Service Mesh (ASM) イングレスゲートウェイで TLS 1.2 以降を強制するように設定します。また、TLS 1.2 の脆弱な暗号スイートを無効にする必要もあります。

前提条件

開始する前に、次のものが揃っていることを確認してください:

ステップ 1: TLS 証明書と秘密鍵の準備

イングレスゲートウェイ用の TLS 証明書と秘密鍵を作成または取得し、ゲートウェイが参照できる認証情報として保存します。

この例では、aliyun.com ドメインを使用します。このドメインの証明書と秘密鍵がすでにある場合は、それぞれ aliyun.com.crtaliyun.com.key に名前を変更します。ない場合は、次の openssl コマンドで自己署名証明書を生成します。

自己署名証明書の生成

  1. ルート証明書と秘密鍵の作成:

       openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \
         -subj '/O=myexample Inc./CN=aliyun.com' \
         -keyout aliyun.root.key -out aliyun.root.crt
  2. aliyun.com のサーバー証明書と秘密鍵の作成:

       openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes \
         -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
       openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key \
         -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt

証明書の保存

ご利用の ASM インスタンスのバージョンに基づいて、次のいずれかの方法を選択します。

v1.17 より前の ASM バージョン

kubectl を使用してイングレスゲートウェイの Pod が実行されているクラスターに接続し、istio-system 名前空間にシークレットを作成します:

kubectl create -n istio-system secret tls myexample-credential \
  --key=aliyun.com.key --cert=aliyun.com.crt
重要

シークレット名は istio または prometheus で始めることはできず、token フィールドを含めることはできません。

ASM v1.17 以降

  1. ASM コンソールにログインします。左側のナビゲーションウィンドウで、[Service Mesh] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[ASM ゲートウェイ] > [証明書管理] を選択します。

  3. [証明書管理] ページで、[作成] をクリックします。[証明書情報] パネルで、次のパラメーターを設定し、[OK] をクリックします。

    パラメーター説明
    名前証明書名を入力します。この例では、myexample-credential と入力します。
    公開鍵証明書ステップ 1 で生成された aliyun.com.crt ファイルの内容を入力します。
    秘密鍵ステップ 1 で生成された aliyun.com.key ファイルの内容を入力します。

ステップ 2: TLS バージョンポリシーを持つ Istio ゲートウェイの作成

最小 TLS バージョンを強制する Istio ゲートウェイリソースを定義します。minProtocolVersion フィールドは、ゲートウェイが受け入れる TLS バージョンを制御します。

  1. ASM インスタンスの左側のナビゲーションウィンドウで、[ASM ゲートウェイ] > [ゲートウェイ] を選択します。[YAML から作成] をクリックします。

  2. 名前空間とシナリオテンプレートを選択し、次の YAML を貼り付けます。この設定では、minProtocolVersionTLSV1_2 に設定され、TLS 1.2 および TLS 1.3 の接続を受け入れ、それより古いバージョンはすべて拒否します。minProtocolVersion フィールドは、受け入れられる最小バージョンを制御します。サポートされている値は次のとおりです:

    効果
    TLSV1_0TLS 1.0 以降を受け入れます (非推奨 -- 重大なセキュリティリスクあり)
    TLSV1_1TLS 1.1 以降を受け入れます (非推奨)
    TLSV1_2TLS 1.2 以降を受け入れます (推奨ベースライン)
    TLSV1_3TLS 1.3 のみを受け入れます
       apiVersion: networking.istio.io/v1beta1
       kind: Gateway
       metadata:
         name: mysdsgateway
       spec:
         selector:
           istio: ingressgateway
         servers:
           - hosts:
               - '*'
             port:
               name: https
               number: 443
               protocol: HTTPS
             tls:
               credentialName: myexample-credential
               minProtocolVersion: TLSV1_2
               mode: SIMPLE

ステップ 3: 仮想サービスの作成

VirtualService リソースを作成して、ゲートウェイからアプリケーションにトラフィックをルーティングします。

  1. ASM インスタンスの左側のナビゲーションウィンドウで、[トラフィック管理センター] > [VirtualService] を選択します。[YAML から作成] をクリックします。

  2. 名前空間とシナリオテンプレートを選択し、次の YAML を貼り付けます:

       apiVersion: networking.istio.io/v1beta1
       kind: VirtualService
       metadata:
         name: bookinfo-tlsversion-sample
       spec:
         gateways:
           - mysdsgateway-tlsversion-sample
         hosts:
           - '*'
         http:
           - match:
               - uri:
                   exact: /productpage
               - uri:
                   prefix: /static
               - uri:
                   exact: /login
               - uri:
                   exact: /logout
               - uri:
                   prefix: /api/v1/products
             route:
               - destination:
                   host: productpage
                   port:
                     number: 9080

ステップ 4: TLS バージョンの検証

ゲートウェイと仮想サービスをデプロイした後、意図した TLS バージョンのみが受け入れられることを確認します。testssl.sh は、サーバーが特定の TLS/SSL プロトコルをサポートしているかどうかを確認し、暗号化の欠陥を特定できる無料のコマンドラインツールです。

  1. 次のコマンドを実行して、Docker コンテナで testssl.sh を実行します。<ingress-gateway-ip> をイングレスゲートウェイの IP アドレスに置き換えます。

    docker run --rm -ti registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh \
      https://<ingress-gateway-ip>/productpage

    TLS 1.2 以降の場合に期待されるプロトコルの出力:

    Testing protocols via sockets except NPN+ALPN
    
    SSLv2      not offered (OK)
    SSLv3      not offered (OK)
    TLS 1      not offered
    TLS 1.1    not offered
    TLS 1.2    offered (OK)
    TLS 1.3    offered (OK): final

    not offered が TLS 1 および TLS 1.1 に対して表示されることは、これらのバージョンが無効になっていることを示しています。offered が TLS 1.2 および TLS 1.3 に対して表示されることは、これらのバージョンがアクティブであることを示しています。

    クライアントシミュレーションのセクションには、クライアントごとの接続結果が表示されます:

    期待される出力を表示

    ......
    Running client simulations (HTTP) via sockets
    
     Browser                      Protocol  Cipher Suite Name (OpenSSL)       Forward Secrecy
    ------------------------------------------------------------------------------------------------
     Android 6.0                  TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
     Android 7.0 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
     Android 8.1 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
     Android 9.0 (native)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Android 10.0 (native)        TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Android 11 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Android 12 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Chrome 79 (Win 10)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Chrome 101 (Win 10)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Firefox 66 (Win 8.1/10)      TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Firefox 100 (Win 10)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     IE 6 XP                      No connection
     IE 8 Win 7                   No connection
     IE 8 XP                      No connection
     IE 11 Win 7                  No connection
     IE 11 Win 8.1                No connection
     IE 11 Win Phone 8.1          No connection
     IE 11 Win 10                 TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
     Edge 15 Win 10               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
     Edge 101 Win 10 21H2         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Safari 12.1 (iOS 12.2)       TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519)
     Safari 13.0 (macOS 10.14.6)  TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519)
     Safari 15.4 (macOS 12.3.1)   TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     Java 7u25                    No connection
     Java 8u161                   TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
     Java 11.0.2 (OpenJDK)        TLSv1.3   TLS_AES_128_GCM_SHA256            256 bit ECDH (P-256)
     Java 17.0.3 (OpenJDK)        TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
     go 1.17.8                    TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
     LibreSSL 2.8.3 (Apple)       TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)
     OpenSSL 1.0.2e               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
     OpenSSL 1.1.0l (Debian)      TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)
     OpenSSL 1.1.1d (Debian)      TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
     OpenSSL 3.0.3 (git)          TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
     Apple Mail (16.0)            TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
     Thunderbird (91.9)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)

    クライアントシミュレーションの結果は、TLS 1.2 以降をサポートするクライアントのみが接続を確立できることを示しています。

(オプション) 特定の TLS バージョンへの固定

一部のコンプライアンスポリシーでは、ある範囲のバージョンを受け入れるのではなく、ゲートウェイを単一の TLS バージョンに制限する必要があります。規制またはセキュリティ要件で義務付けられている場合にのみ、次の設定を適用してください。

TLS 1.2 のみ

minProtocolVersionmaxProtocolVersion の両方を TLSV1_2 に設定します:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: mysdsgateway
  namespace: default
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        credentialName: myexample-credential
        maxProtocolVersion: TLSV1_2
        minProtocolVersion: TLSV1_2
        mode: SIMPLE

この設定を適用した後、次のコマンドを実行して、TLS 1.2 のみがサポートされていることを確認します:

docker run --rm -ti registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh \
  https://<ingress-gateway-ip>/productpage

期待される出力:

 Testing protocols via sockets except NPN+ALPN

 SSLv2      not offered (OK)
 SSLv3      not offered (OK)
 TLS 1      not offered
 TLS 1.1    not offered
 TLS 1.2    offered (OK)
 TLS 1.3    not offered and downgraded to a weaker protocol

TLS 1 および TLS 1.1 の not offered、そして TLS 1.3 の not offered and downgraded to a weaker protocol は、TLS 1.2 のみが受け入れられることを示しています。

クライアントシミュレーションの出力:

期待される出力を表示

......
 Running client simulations (HTTP) via sockets

 Browser                      Protocol  Cipher Suite Name (OpenSSL)       Forward Secrecy
------------------------------------------------------------------------------------------------
 Android 6.0                  TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Android 7.0 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Android 8.1 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Android 9.0 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Android 10.0 (native)        TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Android 11 (native)          TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Android 12 (native)          TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Chrome 79 (Win 10)           TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Chrome 101 (Win 10)          TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Firefox 66 (Win 8.1/10)      TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Firefox 100 (Win 10)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 IE 6 XP                      No connection
 IE 8 Win 7                   No connection
 IE 8 XP                      No connection
 IE 11 Win 7                  No connection
 IE 11 Win 8.1                No connection
 IE 11 Win Phone 8.1          No connection
 IE 11 Win 10                 TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Edge 15 Win 10               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Edge 101 Win 10 21H2         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Safari 12.1 (iOS 12.2)       TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Safari 13.0 (macOS 10.14.6)  TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Safari 15.4 (macOS 12.3.1)   TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Java 7u25                    No connection
 Java 8u161                   TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Java 11.0.2 (OpenJDK)        TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Java 17.0.3 (OpenJDK)        TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)
 go 1.17.8                    TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 LibreSSL 2.8.3 (Apple)       TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)
 OpenSSL 1.0.2e               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 OpenSSL 1.1.0l (Debian)      TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)
 OpenSSL 1.1.1d (Debian)      TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)
 OpenSSL 3.0.3 (git)          TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)
 Apple Mail (16.0)            TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Thunderbird (91.9)           TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)

クライアントシミュレーションの結果は、TLS 1.2 をサポートするクライアントのみが接続を確立できることを示しています。

説明

TLS 1.2 に固定すると、パフォーマンスが向上し、セキュリティが強化された TLS 1.3 が無効になります。特定のコンプライアンス要件で TLS 1.2 のみが必須とされている場合にのみ、この設定を使用してください。

TLS 1.3 のみ

minProtocolVersionmaxProtocolVersion の両方を TLSV1_3 に設定します:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: mysdsgateway
  namespace: default
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        credentialName: myexample-credential
        maxProtocolVersion: TLSV1_3
        minProtocolVersion: TLSV1_3
        mode: SIMPLE

この設定を適用した後、次のコマンドを実行して、TLS 1.3 のみがサポートされていることを確認します:

docker run --rm -ti registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh \
  https://<ingress-gateway-ip>/productpage

期待される出力:

Testing protocols via sockets except NPN+ALPN

SSLv2      not offered (OK)
SSLv3      not offered (OK)
TLS 1      not offered
TLS 1.1    not offered
TLS 1.2    not offered
TLS 1.3    offered (OK): final

TLS 1.0、TLS 1.1、および TLS 1.2 の not offered は、TLS 1.3 のみが受け入れられることを示しています。

クライアントシミュレーションの出力:

期待される出力を表示

......
Running client simulations (HTTP) via sockets

 Browser                      Protocol  Cipher Suite Name (OpenSSL)       Forward Secrecy
------------------------------------------------------------------------------------------------
 Android 6.0                  No connection
 Android 7.0 (native)         No connection
 Android 8.1 (native)         No connection
 Android 9.0 (native)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 10.0 (native)        TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 11 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 12 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Chrome 79 (Win 10)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Chrome 101 (Win 10)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Firefox 66 (Win 8.1/10)      TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Firefox 100 (Win 10)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 IE 6 XP                      No connection
 IE 8 Win 7                   No connection
 IE 8 XP                      No connection
 IE 11 Win 7                  No connection
 IE 11 Win 8.1                No connection
 IE 11 Win Phone 8.1          No connection
 IE 11 Win 10                 No connection
 Edge 15 Win 10               No connection
 Edge 101 Win 10 21H2         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Safari 12.1 (iOS 12.2)       TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519)
 Safari 13.0 (macOS 10.14.6)  TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519)
 Safari 15.4 (macOS 12.3.1)   TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Java 7u25                    No connection
 Java 8u161                   No connection
 Java 11.0.2 (OpenJDK)        TLSv1.3   TLS_AES_128_GCM_SHA256            256 bit ECDH (P-256)
 Java 17.0.3 (OpenJDK)        TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
 go 1.17.8                    TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 LibreSSL 2.8.3 (Apple)       No connection
 OpenSSL 1.0.2e               No connection
 OpenSSL 1.1.0l (Debian)      No connection
 OpenSSL 1.1.1d (Debian)      TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
 OpenSSL 3.0.3 (git)          TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
 Apple Mail (16.0)            No connection
 Thunderbird (91.9)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)

クライアントシミュレーションの結果は、TLS 1.3 をサポートするクライアントのみが接続を確立できることを示しています。

重要

TLS 1.3 のみのモードは、Android 6.0~8.1、IE 11 (Win 7/8.1)、Java 8、LibreSSL 2.8、および 1.1.1 より前の OpenSSL バージョンを含む古いクライアントからの接続を中断させます。本番環境でこのモードを有効にする前に、クライアントの互換性を評価してください。