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:
Memiliki instans ASM Edisi Perusahaan atau Edisi Ultimate versi v1.14 atau lebih baru. Untuk informasi selengkapnya, lihat Create an ASM instance dan Update an ASM instance.
Menambahkan kluster ke instans ASM. Untuk informasi selengkapnya, lihat Add a cluster to an ASM instance.
Mendeploy gerbang masuk di kluster. Untuk informasi selengkapnya, lihat Create an ingress gateway.
Mendeploy aplikasi di instans ASM. Untuk informasi selengkapnya, lihat Deploy an application in an ASM instance.
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
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.crtBuat 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.crtNama secret tidak boleh diawali dengan istio atau prometheus, dan tidak boleh mengandung bidang token.
ASM v1.17 atau lebih baru
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, klik nama instans ASM Anda. Di panel navigasi sebelah kiri, pilih ASM Gateways > Certificate Management.
Pada halaman Certificate Management, klik Create. Pada panel Certificate Information, konfigurasikan parameter berikut dan klik OK.
Parameter Deskripsi Name Masukkan nama sertifikat. Untuk contoh ini, masukkan myexample-credential.Public Key Certificate Masukkan isi file aliyun.com.crtyang dihasilkan pada Langkah 1.Private Key Masukkan isi file aliyun.com.keyyang 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.
Di panel navigasi sebelah kiri instans ASM Anda, pilih ASM Gateways > Gateway. Klik Create from YAML.
Pilih namespace dan templat skenario, lalu tempel YAML berikut. Konfigurasi ini mengatur
minProtocolVersionkeTLSV1_2, sehingga menerima koneksi TLS 1.2 dan TLS 1.3 serta menolak versi yang lebih lama. BidangminProtocolVersionmengontrol versi minimum yang diterima. Nilai yang didukung:Nilai Efek 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.
Di panel navigasi sebelah kiri instans ASM Anda, pilih Traffic Management Center > VirtualService. Klik Create from YAML.
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.
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>/productpageOutput 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): finalnot offereduntuk TLS 1.0 dan TLS 1.1 mengonfirmasi bahwa versi ini dinonaktifkan.offereduntuk TLS 1.2 dan TLS 1.3 mengonfirmasi bahwa versi ini aktif.Bagian simulasi klien menampilkan hasil koneksi berdasarkan klien:
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: SIMPLESetelah 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>/productpageOutput 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 protocolnot 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:
Hasil simulasi klien menunjukkan bahwa hanya klien yang mendukung TLS 1.2 yang dapat membuat koneksi.
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: SIMPLESetelah 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>/productpageOutput 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): finalnot offered untuk TLS 1.0, TLS 1.1, dan TLS 1.2 mengonfirmasi bahwa hanya TLS 1.3 yang diterima.
Output simulasi klien:
Hasil simulasi klien menunjukkan bahwa hanya klien yang mendukung TLS 1.3 yang dapat membuat koneksi.
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.