TLS 1.0 ve TLS 1.1 gibi eski Transport Layer Security (TLS) sürümleri bilinen güvenlik açıkları içerir; bu durum HTTPS trafiğini man-in-the-middle saldırılarına ve veri ihlallerine karşı savunmasız bırakır. Alibaba Cloud Service Mesh (ASM) giriş ağ geçidinizi yapılandırmak için Gateway kaynağında minProtocolVersion alanını ayarlayın ve TLS 1.2 veya sonraki sürümlerin kullanılmasını zorunlu kılın.
Genel bilgiler
TLS 1.0 dahil olmak üzere erken dönem TLS sürümleri, iletim sırasında veri ihlallerine yol açabilen bilinen güvenlik sorunları barındırır. Web sitesi güvenliğini artırmak için en iyi uygulama, TLS 1.0 ve TLS 1.1'i TLS 1.2 veya daha yeni bir sürümle değiştirmektir. Ayrıca TLS 1.2 içindeki zayıf şifre takımlarını devre dışı bırakmanız gerekir.
Ön koşullar
Başlamadan önce aşağıdaki ön koşulları karşıladığınızdan emin olun:
v1.14 veya üzeri sürümde Enterprise Edition ya da Ultimate Edition türünde bir ASM örneği. Daha fazla bilgi için bkz. ASM örneği oluşturma ve ASM örneğini güncelleme
ASM örneğine eklenmiş bir küme. Daha fazla bilgi için bkz. ASM örneğine küme ekleme
Dağıtılmış bir giriş ağ geçidi. Daha fazla bilgi için bkz. Giriş ağ geçidi oluşturma
ASM örneğinde dağıtılmış bir uygulama. Daha fazla bilgi için bkz. ASM örneğinde uygulama dağıtma
Adım 1: TLS sertifikası ve özel anahtar hazırlama
Giriş ağ geçidi için bir TLS sertifikası ve özel anahtar oluşturun, ardından bunları bir Kubernetes secret'ında veya ASM sertifikasında saklayın. Aşağıdaki örnek aliyun.com alan adını kullanır. Bu alan adı için zaten bir sertifikanız ve özel anahtarınız varsa dosyaları aliyun.com.crt ve aliyun.com.key olarak yeniden adlandırın ve doğrudan 3. alt adıma geçin.
-
Kök sertifikayı ve özel anahtarı oluşturun:
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 -
aliyun.comiçin sunucu sertifikasını ve özel anahtarı oluşturun: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 -
Sertifikayı ve özel anahtarı depolayın. Yöntem, kullandığınız ASM sürümüne bağlıdır:
v1.17 öncesi ASM sürümleri
Giriş ağ geçidi pod'unu barındıran kümeye kubectl kullanarak bağlanın ve
istio-systemad alanında bir TLS secret'ı oluşturun:kubectl create -n istio-system secret tls myexample-credential \ --key=aliyun.com.key --cert=aliyun.com.crtÖnemliSecret adı
istioveyaprometheusile başlamamalı vetokenalanı içermemelidir.ASM v1.17 veya üzeri
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinizin adına tıklayın. Sol gezinme bölmesinde ASM Gateways > Certificate Management seçeneğini belirleyin.
-
Certificate Management sayfasında Create seçeneğine tıklayın. Certificate Information panelinde aşağıdaki parametreleri yapılandırın ve OK seçeneğine tıklayın.
Parameter Value Name myexample-credentialPublic Key Certificate 2. alt adımda oluşturulan aliyun.com.crtdosyasının içeriğini yapıştırınPrivate Key 2. alt adımda oluşturulan aliyun.com.keydosyasının içeriğini yapıştırın
Adım 2: TLS sürümü zorlaması içeren bir Istio ağ geçidi oluşturma
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinizin adına tıklayın. Sol gezinme bölmesinde ASM Gateways > Gateway seçeneğini belirleyin. Create from YAML seçeneğine tıklayın.
-
Bir ad alanı seçin ve aşağıdaki YAML kodunu yapıştırın.
minProtocolVersion: TLSV1_2ayarı, TLS 1.0 veya TLS 1.1 kullanan tüm bağlantıları reddeder: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
Adım 3: VirtualService oluşturma
ASM örneği ayrıntıları sayfasında sol gezinme bölmesinden Traffic Management Center > VirtualService seçeneğini belirleyin. Create from YAML seçeneğine tıklayın.
-
Bir ad alanı seçin ve aşağıdaki YAML kodunu yapıştırın:
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
Adım 4: TLS yapılandırmasını doğrulama
Giriş ağ geçidinin hangi TLS sürümlerini kabul ettiğini doğrulamak için testssl.sh aracını kullanın. testssl.sh, herhangi bir sunucu uç noktasındaki TLS/SSL protokol desteğini, şifre takımlarını ve bilinen güvenlik açıklarını kontrol eden açık kaynaklı bir komut satırı aracıdır.
testssl.sh aracını giriş ağ geçidine karşı çalıştırın:
docker run --rm -ti registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh https://<ingress-gateway-ip>/productpage
<ingress-gateway-ip> ifadesini giriş ağ geçidinizin IP adresiyle değiştirin.
TLS 1.2 ve sonraki sürümleri doğrulama (önerilen)
minProtocolVersion değeri 2. Adımda yapılandırıldığı gibi TLSV1_2 olarak ayarlandığında beklenen çıktı aşağıdaki gibidir:
| Protocol | Status |
|---|---|
| SSLv2 | Not offered |
| SSLv3 | Not offered |
| TLS 1.0 | Not offered |
| TLS 1.1 | Not offered |
| TLS 1.2 | Offered |
| TLS 1.3 | Offered |
Yalnızca TLS 1.2 veya TLS 1.3 destekleyen istemciler bağlanabilir. Eski istemciler (IE 8, Java 7 gibi) reddedilir.
(İsteğe bağlı) Yalnızca TLS 1.2 ile sınırlama
Yalnızca TLS 1.2 bağlantılarına izin vermek ve TLS 1.3'ü reddetmek için minProtocolVersion ve maxProtocolVersion değerlerini TLSV1_2 olarak ayarlayın:
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
Doğrulamak için testssl.sh aracını tekrar çalıştırın. Beklenen sonuçlar aşağıdaki gibidir:
| Protocol | Status |
|---|---|
| SSLv2 | Not offered |
| SSLv3 | Not offered |
| TLS 1.0 | Not offered |
| TLS 1.1 | Not offered |
| TLS 1.2 | Offered |
| TLS 1.3 | Not offered (downgraded to a weaker protocol) |
Yalnızca TLS 1.2 destekleyen istemciler bağlanabilir. Yalnızca TLS 1.3 destekleyen tüm istemciler TLS 1.2'ye geri döner.
(İsteğe bağlı) Yalnızca TLS 1.3 ile sınırlama
Yalnızca TLS 1.3'ü zorunlu kılmak için minProtocolVersion ve maxProtocolVersion değerlerini TLSV1_3 olarak ayarlayın:
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
Yalnızca TLS 1.3 modu istemci uyumluluğunu önemli ölçüde azaltır. Birçok eski tarayıcı, Java 8, OpenSSL 1.0.x ve LibreSSL 2.x bağlanamaz. Üretim ortamında TLS 1.3'ü zorunlu kılmadan önce istemci uyumluluğunu test edin.
Doğrulamak için testssl.sh aracını tekrar çalıştırın. Beklenen sonuçlar aşağıdaki gibidir:
| Protocol | Status |
|---|---|
| SSLv2 | Not offered |
| SSLv3 | Not offered |
| TLS 1.0 | Not offered |
| TLS 1.1 | Not offered |
| TLS 1.2 | Not offered |
| TLS 1.3 | Offered |
Yalnızca TLS 1.3 destekleyen istemciler bağlanabilir. Yalnızca TLS 1.2 destekleyen tüm istemciler reddedilir.