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.
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.
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
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
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
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
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
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih . Di halaman yang muncul, klik Create from YAML.
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
Di halaman detail instance ASM, pilih di panel navigasi kiri. Di halaman yang muncul, klik Create from YAML.
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.
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.
(Opsional) Jika Anda perlu menggunakan TLS 1.2 saja, lakukan langkah-langkah berikut:
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
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.
(Opsional) Jika Anda perlu menggunakan TLS 1.3 saja, lakukan langkah-langkah berikut:
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
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.