Todos os produtos
Search
Central de documentação

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

Última atualização: Jun 28, 2026

Versões antigas do protocolo Transport Layer Security (TLS), como TLS 1.0 e TLS 1.1, apresentam vulnerabilidades conhecidas que expõem o tráfego HTTPS a ataques man-in-the-middle e violações de dados. Configure o gateway de entrada do Alibaba Cloud Service Mesh (ASM) para impor o uso de TLS 1.2 ou superior definindo o campo minProtocolVersion no recurso Gateway.

Informações de base

As primeiras versões do TLS, incluindo a 1.0, apresentam problemas de segurança conhecidos que podem resultar em vazamento de dados durante a transmissão. Para aumentar a segurança do site, substitua o TLS 1.0 e o TLS 1.1 pelo TLS 1.2 ou posterior. Desative também os conjuntos de cifras fracas no TLS 1.2.

Pré-requisitos

Antes de começar, verifique se você tem:

Etapa 1: Preparar um certificado TLS e uma chave privada

Crie um certificado TLS e uma chave privada para o gateway de entrada e armazene-os em um secret do Kubernetes ou em um certificado do ASM. O exemplo abaixo usa o domínio aliyun.com. Se você já tiver o certificado e a chave privada para esse domínio, renomeie-os para aliyun.com.crt e aliyun.com.key e pule para a subetapa 3.

  1. Gere um certificado raiz e uma chave privada:

       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. Gere um certificado de servidor e uma chave privada para 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. Armazene o certificado e a chave privada. O método varia conforme a versão do ASM:

    Versões do ASM anteriores à v1.17

    Conecte-se ao cluster que hospeda o pod do gateway de entrada com kubectl e crie um secret TLS no namespace istio-system:

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

    O nome do secret não deve começar com istio ou prometheus e não pode conter um campo token.

    ASM v1.17 ou posterior

    1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique em no nome da sua instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Certificate Management.

    3. Na página Certificate Management, clique em Create. No painel Certificate Information, configure os parâmetros abaixo e clique em OK.

      Parâmetro

      Valor

      Name

      myexample-credential

      Public Key Certificate

      Cole o conteúdo do arquivo aliyun.com.crt gerado na subetapa 2

      Private Key

      Cole o conteúdo do arquivo aliyun.com.key gerado na subetapa 2

Etapa 2: Crie um gateway Istio com imposição de versão TLS

  1. Acesse o console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em no nome da sua instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Gateway. Clique em Create from YAML.

  3. Selecione um namespace e cole o YAML a seguir. A configuração minProtocolVersion: TLSV1_2 rejeita todas as conexões que usam TLS 1.0 ou TLS 1.1:

       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

Etapa 3: Crie um VirtualService

  1. Na página de detalhes da instância do ASM, escolha Traffic Management Center > VirtualService no painel de navegação à esquerda. Clique em Create from YAML.

  2. Selecione um namespace e cole o seguinte YAML:

       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

Etapa 4: Verifique a configuração de TLS

Use a ferramenta testssl.sh para validar quais versões de TLS o gateway de entrada aceita. O testssl.sh é uma ferramenta open source de linha de comando que verifica o suporte a protocolos TLS/SSL, conjuntos de cifras e vulnerabilidades conhecidas em qualquer endpoint de servidor.

Execute o testssl.sh no gateway de entrada:

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

Substitua <ingress-gateway-ip> pelo endereço IP do seu gateway de entrada.

Verifique TLS 1.2 e posteriores (recomendado)

Com o parâmetro minProtocolVersion definido como TLSV1_2 (conforme configurado na Etapa 2), a saída esperada exibe:

Protocolo

Status

SSLv2

Não oferecido

SSLv3

Não oferecido

TLS 1.0

Não oferecido

TLS 1.1

Não oferecido

TLS 1.2

Oferecido

TLS 1.3

Oferecido

Somente clientes com suporte a TLS 1.2 ou TLS 1.3 conseguem se conectar. Clientes mais antigos (como IE 8 e Java 7) são rejeitados.

Saída completa do testssl.sh

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

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

(Opcional) Restringir apenas ao TLS 1.2

Para permitir exclusivamente conexões TLS 1.2 e rejeitar TLS 1.3, defina tanto minProtocolVersion quanto maxProtocolVersion como 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

Execute o testssl.sh novamente para validação. Resultados esperados:

Protocolo

Status

SSLv2

Não oferecido

SSLv3

Não oferecido

TLS 1.0

Não oferecido

TLS 1.1

Não oferecido

TLS 1.2

Oferecido

TLS 1.3

Não oferecido (rebaixado para um protocolo mais fraco)

Apenas clientes compatíveis com TLS 1.2 conseguirão se conectar. Todos os clientes que suportam somente TLS 1.3 farão fallback para TLS 1.2.

Saída completa do testssl.sh

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

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

(Opcional) Restringir apenas ao TLS 1.3

Para impor exclusivamente o TLS 1.3, configure minProtocolVersion e maxProtocolVersion com o valor 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
Importante

O modo exclusivo de TLS 1.3 reduz significativamente a compatibilidade com clientes. Diversos navegadores antigos, Java 8, OpenSSL 1.0.x e LibreSSL 2.x não conseguirão se conectar. Teste a compatibilidade dos clientes antes de impor o TLS 1.3 em ambiente de produção.

Execute o testssl.sh novamente para confirmar. Veja os resultados esperados:

Protocolo

Status

SSLv2

Não oferecido

SSLv3

Não oferecido

TLS 1.0

Não oferecido

TLS 1.1

Não oferecido

TLS 1.2

Não oferecido

TLS 1.3

Oferecido

Somente clientes com suporte a TLS 1.3 poderão se conectar. Qualquer cliente restrito a TLS 1.2 será rejeitado.

Saída completa do testssl.sh

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

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

Tópicos relacionados