All Products
Search
Document Center

Alibaba Cloud Service Mesh:Enforce TLS versions on an ingress gateway

Last Updated:Apr 21, 2026

TLS 1.0 dan TLS 1.1 memiliki kerentanan yang diketahui sehingga mengekspos lalu lintas HTTPS terhadap serangan man-in-the-middle dan kebocoran data. Untuk mengurangi risiko tersebut, konfigurasikan gerbang masuk Service Mesh (ASM) Anda agar menerapkan TLS 1.2 atau versi yang lebih baru. Anda juga harus menonaktifkan cipher lemah dalam TLS 1.2.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Langkah 1: Siapkan sertifikat TLS dan kunci privat

Buat atau peroleh sertifikat TLS dan kunci privat untuk gerbang masuk, lalu simpan sebagai kredensial yang dapat direferensikan oleh gerbang tersebut.

Contoh ini menggunakan domain aliyun.com. Jika Anda sudah memiliki sertifikat dan kunci privat untuk domain ini, ubah namanya menjadi aliyun.com.crt dan aliyun.com.key. Jika tidak, buat sertifikat tanda tangan sendiri dengan perintah openssl berikut.

Buat sertifikat tanda tangan sendiri

  1. Buat sertifikat root dan kunci privat:

       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. Buat sertifikat server dan kunci privat untuk 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

Simpan sertifikat

Pilih salah satu metode berikut berdasarkan versi instans ASM Anda.

Versi ASM sebelum v1.17

Gunakan kubectl untuk terhubung ke kluster tempat Pod gerbang masuk berjalan, lalu buat secret di namespace istio-system:

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

Nama secret tidak boleh diawali dengan istio atau prometheus, dan tidak boleh mengandung bidang token.

ASM v1.17 atau lebih baru

  1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM Anda. Di panel navigasi sebelah kiri, pilih ASM Gateways > Certificate Management.

  3. Pada halaman Certificate Management, klik Create. Pada panel Certificate Information, konfigurasikan parameter berikut dan klik OK.

    ParameterDeskripsi
    NameMasukkan nama sertifikat. Untuk contoh ini, masukkan myexample-credential.
    Public Key CertificateMasukkan isi file aliyun.com.crt yang dihasilkan pada Langkah 1.
    Private KeyMasukkan isi file aliyun.com.key yang dihasilkan pada Langkah 1.

Langkah 2: Buat Gateway Istio dengan kebijakan versi TLS

Definisikan resource Gateway Istio yang menerapkan versi TLS minimum. Bidang minProtocolVersion mengontrol versi TLS yang diterima oleh gerbang.

  1. Di panel navigasi sebelah kiri instans ASM Anda, pilih ASM Gateways > Gateway. Klik Create from YAML.

  2. Pilih namespace dan templat skenario, lalu tempel YAML berikut. Konfigurasi ini mengatur minProtocolVersion ke TLSV1_2, sehingga menerima koneksi TLS 1.2 dan TLS 1.3 serta menolak versi yang lebih lama. Bidang minProtocolVersion mengontrol versi minimum yang diterima. Nilai yang didukung:

    NilaiEfek
    TLSV1_0Menerima TLS 1.0 dan versi setelahnya (tidak disarankan — risiko keamanan serius)
    TLSV1_1Menerima TLS 1.1 dan versi setelahnya (tidak disarankan)
    TLSV1_2Menerima TLS 1.2 dan versi setelahnya (garis dasar yang disarankan)
    TLSV1_3Hanya menerima TLS 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

Langkah 3: Buat layanan virtual

Rutekan lalu lintas dari gerbang ke aplikasi Anda dengan membuat resource VirtualService.

  1. Di panel navigasi sebelah kiri instans ASM Anda, pilih Traffic Management Center > VirtualService. Klik Create from YAML.

  2. Pilih namespace dan templat skenario, lalu tempel YAML berikut:

       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

Langkah 4: Verifikasi versi TLS

Setelah mendeploy gerbang dan layanan virtual, verifikasi bahwa hanya versi TLS yang dimaksudkan yang diterima. testssl.sh adalah alat baris perintah gratis yang memeriksa apakah server mendukung protokol TLS/SSL tertentu dan dapat mengidentifikasi cacat enkripsi.

  1. Jalankan perintah berikut untuk menjalankan testssl.sh dalam kontainer Docker. Ganti <ingress-gateway-ip> dengan alamat IP gerbang masuk Anda.

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

    Output protokol yang diharapkan untuk TLS 1.2 dan versi setelahnya:

    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 untuk TLS 1.0 dan TLS 1.1 mengonfirmasi bahwa versi ini dinonaktifkan. offered untuk TLS 1.2 dan TLS 1.3 mengonfirmasi bahwa versi ini aktif.

    Bagian simulasi klien menampilkan hasil koneksi berdasarkan klien:

    Expand to view the expected output

    ......
    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)

    Hasil simulasi klien menunjukkan bahwa hanya klien yang mendukung TLS 1.2 atau versi setelahnya yang dapat membuat koneksi.

(Opsional) Tetapkan ke versi TLS tertentu

Beberapa kebijakan kepatuhan mengharuskan pembatasan gerbang ke satu versi TLS saja, bukan menerima rentang versi. Terapkan konfigurasi berikut hanya ketika persyaratan regulasi atau keamanan mewajibkannya.

Hanya TLS 1.2

Atur minProtocolVersion dan maxProtocolVersion ke 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

Setelah menerapkan konfigurasi ini, jalankan perintah berikut untuk memverifikasi bahwa hanya TLS 1.2 yang didukung:

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

Output yang diharapkan:

 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

not offered untuk TLS 1.0 dan TLS 1.1, serta not offered and downgraded to a weaker protocol untuk TLS 1.3 mengonfirmasi bahwa hanya TLS 1.2 yang diterima.

Output simulasi klien:

Expand to view the expected output

......
 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)

Hasil simulasi klien menunjukkan bahwa hanya klien yang mendukung TLS 1.2 yang dapat membuat koneksi.

Catatan

Menetapkan ke TLS 1.2 menonaktifkan TLS 1.3, yang menawarkan peningkatan performa dan keamanan yang lebih kuat. Gunakan konfigurasi ini hanya ketika persyaratan kepatuhan tertentu mewajibkan penggunaan eksklusif TLS 1.2.

Hanya TLS 1.3

Atur minProtocolVersion dan maxProtocolVersion ke 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

Setelah menerapkan konfigurasi ini, jalankan perintah berikut untuk memverifikasi bahwa hanya TLS 1.3 yang didukung:

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

Output yang diharapkan:

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

not offered untuk TLS 1.0, TLS 1.1, dan TLS 1.2 mengonfirmasi bahwa hanya TLS 1.3 yang diterima.

Output simulasi klien:

Expand to view the expected output

......
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)

Hasil simulasi klien menunjukkan bahwa hanya klien yang mendukung TLS 1.3 yang dapat membuat koneksi.

Penting

Mode hanya TLS 1.3 memutus koneksi dari klien lama, termasuk Android 6.0–8.1, IE 11 (Windows 7/8.1), Java 8, LibreSSL 2.8, dan versi OpenSSL sebelum 1.1.1. Evaluasi kompatibilitas klien sebelum mengaktifkan mode ini di lingkungan produksi.