Configurar o TLS autenticado de back-end

Esta página contém instruções para configurar o TLS autenticado de back-end, também conhecido como autenticação de back-end, usando certificados autogerenciados para balanceadores de carga de aplicativo externos globais.

Para configurar o TLS autenticado de back-end, faça o seguinte:

  • Crie um recurso de configuração de confiança que consiste em certificados raiz e intermediários.
  • Crie um recurso de configuração de autenticação de back-end que faça referência à configuração de confiança.
  • Anexe o recurso de configuração de autenticação de back-end ao serviço de back-end do balanceador de carga.

Antes de começar

Permissões

Esta seção lista as permissões necessárias para configurar o TLS autenticado do back-end.
Operação Permissão
Criar uma configuração de confiança certificatemanager.trustconfigs.create no projeto do Google Cloud de destino
Criar um recurso de configuração de autenticação de back-end
  • certificatemanager.certs.use no certificado de destino
  • certificatemanager.trustconfigs.use na configuração de confiança de destino
  • networksecurity.backendauthenticationconfigs.create no projeto do Google Cloud de destino
  • Anexar o recurso de configuração de autenticação de back-end ao serviço de back-end do balanceador de carga
  • compute.backendservice.update no serviço de back-end de destino
  • networksecurity.backendauthenticationconfigs.use no recurso de configuração de autenticação de back-end de destino
  • Visão geral da configuração

    As seções a seguir descrevem as etapas para configurar o TLS autenticado de back-end com base na arquitetura mostrada no diagrama abaixo:

    Componentes do TLS autenticado de back-end.
    Componentes TLS autenticados de back-end (clique para ampliar).

    Criar os certificados raiz e intermediários

    Esta seção usa a biblioteca OpenSSL para criar o certificado raiz (âncora de confiança) e o certificado intermediário.

    Um certificado raiz está no topo da cadeia de certificados. Um certificado intermediário faz parte da cadeia de confiança de volta ao certificado raiz. O certificado intermediário é assinado criptograficamente pelo certificado raiz. Quando o balanceador de carga recebe um certificado do servidor, ele o valida estabelecendo uma cadeia de confiança do certificado do servidor de volta ao âncora de confiança configurado.

    Use os comandos abaixo para criar os certificados raiz e intermediários.

    1. Crie um arquivo de configuração OpenSSL.

      No exemplo abaixo, o arquivo de configuração (example.cnf) contém a seção [ca_exts], que especifica extensões X.509 que marcam o certificado como adequado para uma AC. Para saber mais sobre os requisitos para certificados raiz e intermediários, consulte Requisitos do certificado.

      cat > example.cnf << EOF
      [req]
      distinguished_name = empty_distinguished_name
      
      [empty_distinguished_name]
      # Kept empty to allow setting via -subj command-line argument.
      
      [ca_exts]
      basicConstraints=critical,CA:TRUE
      keyUsage=keyCertSign
      extendedKeyUsage=serverAuth
      
      EOF
      
    2. Crie um certificado raiz X.509 autoassinado (root.cert). O certificado raiz é autoassinado com a própria chave privada (root.key).

      openssl req -x509 \
          -new -sha256 -newkey rsa:2048 -nodes \
          -days 3650 -subj '/CN=root' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout root.key -out root.cert
      
    3. Crie a solicitação de assinatura de certificado (CSR) int.req para o certificado intermediário.

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -subj '/CN=int' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout int.key -out int.req
      
    4. Assine a CSR para criar o certificado intermediário X.509 (int.cert). A CSR é assinada usando o certificado raiz.

      openssl x509 -req \
          -CAkey root.key -CA root.cert \
          -set_serial 1 \
          -days 3650 \
          -extfile example.cnf \
          -extensions ca_exts \
          -in int.req -out int.cert
      

    Formatar os certificados

    Para incluir certificados novos ou atuais em um armazenamento de confiança, formate os certificados em uma única linha e armazene-os em variáveis de ambiente para que possam ser referenciados pelo arquivo YAML de configuração de confiança.

    export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    
    export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    

    Criar um recurso de configuração de confiança

    Uma configuração de confiança é um recurso que representa a configuração da infraestrutura de chave pública (ICP) no Gerenciador de certificados.

    Para criar um recurso de configuração de confiança, siga estas etapas:

    Console

    1. No console do Google Cloud, acesse a página Gerenciador de certificados.

      Acessar o Gerenciador de certificados

    2. Na guia Configurações de confiança, clique em Adicionar configuração de confiança.

    3. Insira um nome para a configuração.

    4. Em Local, selecione Global. O local denota onde o recurso trustconfig é armazenado. Para balanceadores de carga de aplicativo externos globais, é necessário criar um recurso de configuração de confiança global.

    5. Na seção Repositório de confiança, clique em Adicionar âncora de confiança e faça upload do arquivo de certificado codificado em PEM ou copie o conteúdo do certificado.

    6. Clique em Adicionar.

    7. Na seção Repositório de confiança, clique em Adicionar AC intermediária e faça upload do arquivo de certificado codificado em PEM ou copie o conteúdo do certificado. Essa etapa permite adicionar outro nível de confiança entre o certificado raiz e o certificado do servidor.

    8. Clique em Adicionar para adicionar a AC intermediária.

    9. Para adicionar o certificado à lista de permissões, clique em Adicionar.

    10. Clique em Criar.

    Verifique se o novo recurso de configuração de confiança aparece na lista de configurações.

    gcloud

    1. Crie um arquivo YAML de configuração de confiança (trust_config.yaml) que especifique os parâmetros de configuração de confiança. Este exemplo de recurso de configuração de confiança contém um repositório de confiança com uma âncora de confiança e um certificado intermediário. Este exemplo de recurso de configuração de confiança lê o conteúdo do certificado das variáveis de ambiente criadas na etapa anterior Formatar os certificados.

      cat << EOF > trust_config.yaml
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT_CERT}"
        intermediateCas:
        - pemCertificate: "${INTERMEDIATE_CERT}"
      EOF
      

      Para criar um repositório de confiança com âncoras de confiança ou certificados intermediários adicionais, adicione linhas de pemCertificate na seção apropriada.

    2. Para importar o arquivo YAML de configuração de confiança, use o comando gcloud certificate-manager trust-configs import:

      Para balanceadores de carga de aplicativo externos globais, especifique global como o local em que o recurso de configuração de confiança é armazenado.

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
          --source=trust_config.yaml \
          --location=global
      

      Substitua:

      • TRUST_CONFIG_NAME: o nome do recurso de configuração de confiança

    Criar um recurso de configuração de autenticação de back-end

    Para criar um recurso de configuração de autenticação de back-end (BackendAuthenticationConfig), siga estas etapas.

    Console

    1. No console do Google Cloud, acesse a página Configuração de autenticação.

      Acesse a configuração de autenticação

    2. Na guia Autenticação de back-end, clique em Criar.
    3. Insira um nome para o recurso de configuração de autenticação de back-end.
    4. Opcional: selecione as raízes de confiança públicas.
    5. Selecione o recurso de configuração de confiança criado anteriormente.
    6. Clique em Criar.

    Verifique se o recurso de configuração de autenticação de back-end está sendo exibido.

    gcloud

    1. Crie um arquivo YAML que especifique de forma declarativa os diferentes atributos do recurso de configuração de autenticação do back-end.

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      Substitua:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME : o nome do arquivo YAML em que o recurso de configuração de autenticação de back-end é definido.
      • PROJECT_ID: o ID do seu projeto do Google Cloud
      • BACKEND_AUTH_CONFIG_NAME: o nome do recurso de configuração de autenticação de back-end
      • TRUST_CONFIG_NAME: o nome do recurso de configuração de confiança criado anteriormente.
    2. Para importar o recurso de configuração de autenticação de back-end, use o comando gcloud beta network-security backend-authentication-configs import:

      gcloud beta network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \
         --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \
         --location=global
      

      Substitua:

      • BACKEND_AUTH_CONFIG_NAME: o nome do recurso de configuração de autenticação do back-end

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: o nome do arquivo YAML em que o recurso de configuração de autenticação do back-end é definido.

    Anexar o recurso de configuração de autenticação de back-end ao serviço de back-end do balanceador de carga

    Para anexar o recurso de configuração de autenticação de back-end (BackendAuthenticationConfig) ao serviço de back-end do balanceador de carga, siga estas etapas.

    Console

    1. No Console do Google Cloud, acesse a página Balanceamento de carga.

      Acessar o "Balanceamento de carga"

    2. Na guia Back-ends, selecione o serviço de back-end para o qual você precisa ativar o TLS autenticado e o mTLS.

    3. Clique em Editar.

    4. Abra a seção Configurações avançadas.

    5. Na seção Autenticação de back-end, marque a caixa de seleção Ativar.

    6. Opcional: especifique o nome do host do SNI e os SANs aceitos para validar o certificado de back-end.

    7. Para anexar o recurso de configuração de autenticação de back-end ao serviço de back-end, na lista Configuração de autenticação de back-end, selecione o recurso de configuração de autenticação de back-end.

    8. Clique em Continuar.

    9. Para atualizar as configurações do serviço de back-end, clique em Atualizar.

    gcloud

    1. Para listar todos os recursos de serviço de back-end no projeto, use o comando gcloud compute backend-services list.

      gcloud compute backend-services list
      

      Anote o nome do serviço de back-end para anexar o recurso BackendAuthenticationConfig. Esse nome é chamado de BACKEND_SERVICE_NAME nas etapas a seguir.

    2. Para exportar a configuração do serviço de back-end para um arquivo, use o comando gcloud beta compute backend-services export.

      gcloud beta compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --global
      

      Substitua:

      • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
      • BACKEND_SERVICE_FILENAME: o nome e o caminho para um arquivo YAML em que a configuração do serviço de back-end é exportada
    3. Atualize o atributo tlsSettings do serviço de back-end, apontando-o para o recurso de configuração de autenticação de back-end. Além disso, é possível configurar o nome do host do SNI e os SANs aceitos no serviço de back-end para validar o certificado de back-end.

        cat << EOF >> BACKEND_SERVICE_FILENAME.yaml
        tlsSettings:
          authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
          sni: examplepetstore.com
          subjectAltNames:
          - dnsName: examplepetstore.com
          - dnsName: api.examplepetstore.com
        EOF
        

      Os valores de SNI e SAN na declaração YAML anterior são apenas exemplos. Você pode substituí-los por valores reais que sejam relevantes para sua configuração.

      Substitua:

      • BACKEND_SERVICE_FILENAME: o nome do arquivo YAML em que a configuração do serviço de back-end é exportada

      • PROJECT_ID: o ID do seu projeto do Google Cloud;

      • BACKEND_AUTH_CONFIG_NAME: o nome do recurso de configuração de autenticação do back-end

    4. Para importar a configuração atualizada do serviço de back-end de um arquivo, use o comando gcloud beta compute backend-services import.

      gcloud beta compute backend-services import BACKEND_SERVICE_NAME \
          --source=BACKEND_SERVICE_FILENAME.yaml \
          --global
      

      Substitua:

      • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
      • BACKEND_SERVICE_FILENAME: o nome do arquivo YAML de configuração do serviço de back-end.

    Criar um certificado do servidor de back-end

    Esta seção oferece uma opção de configuração adicional para criar um certificado de servidor (folha) assinado pelo certificado intermediário, que faz parte da configuração de confiança. Isso garante que uma cadeia de confiança possa ser estabelecida do certificado do servidor de volta ao âncora de confiança.

    Se você já criou um recurso de configuração de confiança que contém um certificado intermediário, faça o seguinte:

    1. Crie um arquivo de configuração para gerar a CSR do certificado do servidor.

      O arquivo de configuração a seguir (server.config) contém a seção [extension_requirements], que especifica as extensões X.509 a serem incluídas na CSR. Para saber mais sobre os requisitos de certificados do servidor, consulte Requisitos de certificado.

      cat > server.config << EOF
      [req]
      default_bits              = 2048
      req_extensions            = extension_requirements
      distinguished_name        = dn_requirements
      prompt                    = no
      
      [extension_requirements]
      basicConstraints          = critical, CA:FALSE
      keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
      extendedKeyUsage          = serverAuth
      subjectAltName            = @alt_names
      
      [alt_names]
      DNS.1 = examplepetstore.com
      DNS.2 = api.examplepetstore.com
      
      [dn_requirements]
      countryName               = US
      stateOrProvinceName       = California
      localityName              = San Francisco
      0.organizationName        = example
      organizationalUnitName    = test
      commonName                = examplepetstore.com
      emailAddress              = test@examplepetstore.com
      
      EOF
      
    2. Crie o CSR (server.csr) para o certificado do servidor.

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -config server.config \
          -keyout server.key -out server.csr
      
    3. Assine o CSR para emitir o certificado do servidor X.509 (server.cert). O CSR é assinado pelo certificado intermediário.

      openssl x509 -req \
          -CAkey int.key -CA int.cert \
          -days 365 \
          -extfile server.config \
          -extensions extension_requirements \
          -in server.csr -out server.cert
      

      Quando o balanceador de carga se conecta ao servidor de back-end, ele apresenta o certificado (server.cert) para se autenticar no balanceador de carga, concluindo o processo de autenticação do back-end.

    Opções de configuração SSL adicionais em um servidor da Web Apache

    Esta seção opcional orienta você no processo de atualização das opções de configuração do SSL em um servidor Apache com base nos certificados do servidor que você criou anteriormente.

    1. Copie a chave privada (server.key) e o certificado do servidor (server.cert) para o servidor da Web Apache.

          cat > server.key << EOF
          -----BEGIN PRIVATE KEY-----
          [...]
          -----END PRIVATE KEY-----
          EOF
      
          sudo cp ./server.key /etc/ssl/private/server.key
          

      Substitua [...] pela chave privada do servidor codificada em PEM que você criou anteriormente.

          cat > server.cert << EOF
          -----BEGIN CERTIFICATE-----
          [...]
          -----END CERTIFICATE-----
          EOF
      
          sudo cp ./server.cert /etc/ssl/certs/server.cert
          

      Substitua [...] pelo certificado do servidor codificado em PEM que você criou anteriormente.

    2. Atualize a configuração de SSL do servidor da Web Apache.

      Atualize a configuração SSL do Apache para ativar o tráfego HTTPS usando o certificado SSL e a chave privada especificados.

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLCertificateFile      /etc/ssl/certs/server.cert
          SSLCertificateKeyFile /etc/ssl/private/server.key
          ----
          
    3. Refazer o hash dos certificados de AC.

          sudo c_rehash /etc/ssl/certs/
          
    4. Reinicie o servidor da Web Apache para aplicar as mudanças.

          sudo systemctl restart apache2.service
          

    A seguir