全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Konfigurasikan versi TLS pada gateway ingress untuk meningkatkan keamanan

更新时间:Jul 02, 2025

Jika risiko keamanan disebabkan oleh penggunaan versi Transport Layer Security (TLS) yang lebih lama, Anda dapat mengonfigurasi versi TLS yang lebih baru pada gateway ingress. Nonaktifkan versi sebelumnya seperti TLS 1.0 dan TLS 1.1, serta aktifkan TLS 1.2 atau yang lebih baru untuk mencegah risiko keamanan seperti serangan man-in-the-middle dan pelanggaran data. Hal ini menjamin stabilitas dan keamanan koneksi HTTPS antara layanan dan klien.

Prasyarat

Informasi latar belakang

Versi TLS awal, termasuk TLS 1.0, memiliki masalah keamanan yang diketahui, yang menyebabkan pelanggaran data selama transmisi. Oleh karena itu, praktik terbaik untuk meningkatkan keamanan situs web adalah dengan mengganti TLS 1.0 dan TLS 1.1 dengan TLS 1.2 atau yang lebih baru. Anda juga harus menonaktifkan kata sandi lemah di TLS 1.2.

Langkah 1: Siapkan sertifikat dan kunci privat untuk gateway ingress

Buat sertifikat dan kunci privat untuk gateway ingress, dan simpan sertifikat dan kunci privat dalam sebuah rahasia. Dalam contoh ini, nama domain aliyun.com digunakan. Jika Anda memiliki sertifikat dan kunci privat yang tersedia untuk nama domain aliyun.com, ubah nama kunci privat menjadi aliyun.com.key dan sertifikat menjadi aliyun.com.crt. Sebagai alternatif, jalankan perintah openssl berikut untuk membuat sertifikat dan kunci privat.

  1. Jalankan perintah berikut untuk membuat 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. Jalankan perintah berikut untuk membuat sertifikat dan kunci privat untuk server 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
  3. Buat rahasia atau sertifikat berdasarkan versi instance ASM Anda.

    • Untuk instance ASM dengan versi lebih lama dari v1.17

      Gunakan kubectl untuk terhubung ke cluster tempat pod gateway ingress berada berdasarkan informasi dalam file kubeconfig. Kemudian, jalankan perintah berikut untuk membuat rahasia yang berisi sertifikat dan kunci privat di namespace istio-system:

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

      Nama rahasia tidak boleh dimulai dengan istio atau prometheus, dan tidak boleh berisi bidang token.

    • Untuk instance ASM versi v1.17 atau yang lebih baru

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

      2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih ASM Gateways > Certificate Management.

      3. Di halaman Certificate Management, klik Create. Di panel Certificate Information, konfigurasikan parameter yang diperlukan dan klik OK.

        Parameter

        Deskripsi

        Name

        Masukkan nama sertifikat. Untuk contoh ini, masukkan myexample-credential.

        Public Key Certificate

        Masukkan konten sertifikat aliyun.com.crt yang dihasilkan di Sublangkah 2.

        Private Key

        Masukkan konten kunci privat aliyun.com.key yang dihasilkan di Sublangkah 2.

Langkah 2: Buat gateway Istio

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

  2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih ASM Gateways > Gateway. Di halaman yang muncul, klik Create from YAML.

  3. Di halaman Create, pilih namespace dan template skenario, dan konfigurasikan kode YAML berikut.

    Dalam contoh ini, namespace default digunakan. Dalam kode YAML, parameter minProtocolVersion diatur ke TLSV1_2, yang menunjukkan bahwa TLS 1.2 digunakan.

    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

  1. Di halaman detail instance ASM, pilih Traffic Management Center > VirtualService di panel navigasi kiri. Di halaman yang muncul, klik Create from YAML.

  2. Di halaman Create, pilih namespace dan template skenario, dan konfigurasikan kode YAML berikut:

    Lihat kode YAML layanan virtual

    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

testssl.sh adalah alat baris perintah gratis. Alat ini dapat memeriksa apakah layanan yang disediakan server melalui port mendukung sertifikat atau protokol TLS/SSL. Alat ini juga dapat digunakan untuk mengidentifikasi beberapa cacat enkripsi. Dalam topik ini, testssl.sh digunakan untuk memverifikasi versi TLS.

  1. Jalankan perintah berikut untuk menjalankan testssl.sh dalam sebuah container:

    docker run --rm -ti registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh https://Alamat IP gateway ingress/productpage

    Lihat keluaran yang diharapkan

    Menguji protokol melalui soket kecuali NPN+ALPN
    
    SSLv2      tidak ditawarkan (OK)
    SSLv3      tidak ditawarkan (OK)
    TLS 1      tidak ditawarkan
    TLS 1.1    tidak ditawarkan
    TLS 1.2    ditawarkan (OK)
    TLS 1.3    ditawarkan (OK): final
    
    ......
    Menjalankan simulasi klien (HTTP) melalui soket
    
    Browser                      Protokol  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                      Tidak ada koneksi
    IE 8 Win 7                   Tidak ada koneksi
    IE 8 XP                      Tidak ada koneksi
    IE 11 Win 7                  Tidak ada koneksi
    IE 11 Win 8.1                Tidak ada koneksi
    IE 11 Win Phone 8.1          Tidak ada koneksi
    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                    Tidak ada koneksi
    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)

    Dalam keluaran yang diharapkan, tidak ditawarkan ditampilkan untuk TLS 1 dan TLS 1.1, yang menunjukkan bahwa kedua versi tersebut dinonaktifkan. ditawarkan ditampilkan untuk TLS 1.2 dan TLS 1.3, yang menunjukkan bahwa kedua versi tersebut didukung.

    Simulasi permintaan klien juga menunjukkan bahwa hanya klien yang mendukung TLS 1.2 dan TLS 1.3 yang dapat membangun koneksi.

  2. (Opsional) Jika Anda perlu menggunakan TLS 1.2 saja, lakukan langkah-langkah berikut:

    1. Ubah konfigurasi YAML gateway Istio yang Anda buat di Langkah 2 dengan mengatur maxProtocolVersion dan minProtocolVersion 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
    2. 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://Alamat IP gateway ingress/productpage

      Lihat keluaran yang diharapkan

       Menguji protokol melalui soket kecuali NPN+ALPN
      
       SSLv2      tidak ditawarkan (OK)
       SSLv3      tidak ditawarkan (OK)
       TLS 1      tidak ditawarkan
       TLS 1.1    tidak ditawarkan
       TLS 1.2    ditawarkan (OK)
       TLS 1.3    tidak ditawarkan dan diturunkan ke protokol yang lebih lemah
      
      ......
       Menjalankan simulasi klien (HTTP) melalui soket
      
       Browser                      Protokol  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                      Tidak ada koneksi
       IE 8 Win 7                   Tidak ada koneksi
       IE 8 XP                      Tidak ada koneksi
       IE 11 Win 7                  Tidak ada koneksi
       IE 11 Win 8.1                Tidak ada koneksi
       IE 11 Win Phone 8.1          Tidak ada koneksi
       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                    Tidak ada koneksi
       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 11.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)

      Dalam keluaran yang diharapkan, tidak ditawarkan ditampilkan untuk TLS 1 dan TLS 1.1, serta tidak ditawarkan dan diturunkan ke protokol yang lebih lemah ditampilkan untuk TLS 1.3, yang menunjukkan bahwa ketiga versi TLS tersebut dinonaktifkan. ditawarkan ditampilkan untuk TLS 1.2, yang menunjukkan bahwa hanya TLS 1.2 yang didukung.

      Simulasi permintaan klien juga menunjukkan bahwa hanya klien yang mendukung TLS 1.2 yang dapat membangun koneksi.

  3. (Opsional) Jika Anda perlu menggunakan TLS 1.3 saja, lakukan langkah-langkah berikut:

    1. Ubah konfigurasi YAML gateway Istio yang Anda buat di Langkah 2 dengan mengatur maxProtocolVersion dan minProtocolVersion 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
    2. 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://Alamat IP gateway ingress/productpage

      Lihat keluaran yang diharapkan

      Menguji protokol melalui soket kecuali NPN+ALPN
      
      SSLv2      tidak ditawarkan (OK)
      SSLv3      tidak ditawarkan (OK)
      TLS 1      tidak ditawarkan
      TLS 1.1    tidak ditawarkan
      TLS 1.2    tidak ditawarkan
      TLS 1.3    ditawarkan (OK): final
      
      ......
      Menjalankan simulasi klien (HTTP) melalui soket
      
      Browser                      Protokol  Cipher Suite Name (OpenSSL)       Forward Secrecy
      ------------------------------------------------------------------------------------------------
      Android 6.0                  Tidak ada koneksi
      Android 7.0 (native)         Tidak ada koneksi
      Android 8.1 (native)         Tidak ada koneksi
      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                      Tidak ada koneksi
      IE 8 Win 7                   Tidak ada koneksi
      IE 8 XP                      Tidak ada koneksi
      IE 11 Win 7                  Tidak ada koneksi
      IE 11 Win 8.1                Tidak ada koneksi
      IE 11 Win Phone 8.1          Tidak ada koneksi
      IE 11 Win 10                 Tidak ada koneksi
      Edge 15 Win 10               Tidak ada koneksi
      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                    Tidak ada koneksi
      Java 8u161                   Tidak ada koneksi
      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)       Tidak ada koneksi
      OpenSSL 1.0.2e               Tidak ada koneksi
      OpenSSL 1.1.0l (Debian)      Tidak ada koneksi
      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)            Tidak ada koneksi
      Thunderbird (91.9)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)

      Dalam keluaran yang diharapkan, tidak ditawarkan ditampilkan untuk TLS 1.0, TLS 1.1, dan TLS 1.2, yang menunjukkan bahwa ketiga versi TLS tersebut dinonaktifkan. ditawarkan ditampilkan untuk TLS 1.3, yang menunjukkan bahwa hanya TLS 1.3 yang didukung.

      Simulasi permintaan klien juga menunjukkan bahwa hanya klien yang mendukung TLS 1.3 yang dapat membangun koneksi.