Configurar o mTLS de back-end

Nesta página, você encontra instruções para configurar o mTLS de back-end usando certificados autogerenciados para balanceadores de carga de aplicativo externos globais.

As etapas para configurar o mTLS de back-end são semelhantes ao TLS autenticado de back-end, exceto que também é necessário criar um certificado para o balanceador de carga. Esse certificado, também conhecido como certificado do cliente, é anexado ao recurso BackendAuthenticationConfig. O balanceador de carga usa esse certificado de cliente para se autenticar nos back-ends.

Para configurar o mTLS de back-end, siga as etapas nas seções a seguir:

  1. Crie um recurso de configuração de confiança que consiste em certificados raiz e intermediários.
  2. Crie um certificado do cliente e faça upload dele para o Gerenciador de certificados.
  3. Crie um recurso de configuração de autenticação de back-end que faça referência à configuração de confiança e ao certificado do cliente.
  4. 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 mTLS de back-end.
Operação Permissão
Criar uma configuração de confiança certificatemanager.trustconfigs.create no Google Cloud projeto de destino
Criar um certificado do cliente certificatemanager.certs.create no Google Cloud projeto 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 Google Cloud de destino
  • Anexe 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 mTLS de back-end com base na arquitetura mostrada no diagrama a seguir:

    Componentes do mTLS de back-end.
    Componentes mTLS de back-end (clique para ampliar).

    Criar os certificados raiz e intermediário

    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 até o certificado raiz. O certificado intermediário é assinado criptograficamente pelo certificado raiz. Quando o balanceador de carga recebe um certificado de servidor, ele o valida estabelecendo uma cadeia de confiança do certificado de servidor de volta à âncora de confiança configurada.

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

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

      No exemplo a seguir, 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 CA. Para saber mais sobre os requisitos de certificados raiz e intermediários, consulte Requisitos de 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 Google Cloud , acesse a página Certificate Manager.

      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 indica onde o recurso de configuração de confiança está armazenado. Para balanceadores de carga de aplicativo externos globais, crie 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 CA 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 incluir a AC intermediária.

    9. Para adicionar o certificado que você incluiu na 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 adicionais ou certificados intermediários, 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 está 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 certificado do cliente

    No mTLS de back-end, o balanceador de carga atua como o cliente, e o back-end atua como o servidor.

    Para ativar o mTLS de back-end, o balanceador de carga precisa provar sua identidade para o back-end. Essa autenticação é realizada usando um certificado do cliente que o balanceador de carga apresenta ao back-end. O servidor de back-end precisa validar o certificado do cliente usando a própria cadeia de confiança.

    Ao se conectar a um servidor de back-end, o balanceador de carga define a indicação de nome do servidor (SNI, na sigla em inglês) como o nome do host especificado na configuração de TLS. O servidor de back-end seleciona o certificado SSL/TLS adequado com base nesse valor de SNI. O balanceador de carga espera que o valor SNI corresponda a um nome alternativo do assunto (SAN) listado no certificado do servidor de back-end.

    Os certificados de cliente podem ser gerenciados por uma CA particular usando o Certificate Authority Service ou certificados de ICP particular autogerenciados. Neste exemplo, o certificado do cliente é emitido usando certificados autogerenciados. Esta seção usa a biblioteca OpenSSL para criar o certificado da CA raiz e o certificado do cliente.

    Para criar um certificado do cliente, siga estas etapas:

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

      No exemplo a seguir, 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 autoridade de certificação (CA). O atributo extendedKeyUsage está definido como clientAuth. Para saber mais sobre os requisitos de certificados raiz e intermediários, consulte Requisitos de 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=clientAuth
      
        EOF
      
    2. Crie um certificado de CA 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 um arquivo de configuração para gerar a CSR do certificado do cliente.

      O arquivo de configuração a seguir (client.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 para certificados do cliente, consulte Requisitos de certificado.

        cat > client.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          = clientAuth
      
        [dn_requirements]
        countryName               = US
        stateOrProvinceName       = California
        localityName              = San Francisco
        0.organizationName        = example
        organizationalUnitName    = test
        commonName                = test.example.com
        emailAddress              = test@example.com
      
        EOF
      
    4. Crie a CSR (client.csr) para o certificado do cliente.

        openssl req -new \
            -config client.config \
            -keyout client.key -out client.csr
      
    5. Crie o certificado do cliente (client.cert) com base na CSR. A CSR é assinada pelo certificado da CA raiz para emitir o certificado do cliente X.509.

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

    Fazer upload do certificado do cliente para o Gerenciador de certificados

    Para fazer upload do certificado do cliente no Certificate Manager, siga estas etapas:

    Console

    1. No console Google Cloud , acesse a página Certificate Manager.

      Acessar o Gerenciador de certificados

    2. Na guia Certificados, clique em Adicionar certificado.

    3. Digite um nome para o certificado.

      O nome precisa ser exclusivo no projeto.

    4. Opcional: insira uma descrição para o certificado. A descrição ajuda a identificar um certificado específico mais tarde.

    5. Em Local, selecione Global.

    6. Em Escopo, selecione Autenticação do cliente.

    7. Em Tipo de certificado, escolha Criar certificado autogerenciado.

    8. No campo Certificado, faça upload de um arquivo de certificado codificado em PEM ou copie e cole o conteúdo de um certificado codificado em PEM.

    9. No campo Certificado de chave privada, faça upload de uma chave privada codificada em PEM que não esteja protegida com uma senha longa ou copie e cole o conteúdo da chave privada codificada em PEM.

    10. Especifique um rótulo para associar ao certificado. Você pode adicionar mais de um marcador, se necessário. Para adicionar um rótulo, clique no botão Adicionar rótulo e especifique um key e um value para o rótulo.

    11. Clique em Criar. Verifique se o novo certificado aparece na lista de certificados.

    gcloud

    1. Para fazer upload do certificado do cliente para o Gerenciador de certificados, use o comando gcloud certificate-manager certificates create. O escopo deste certificado é client-auth, o que indica que ele é usado como um certificado de cliente no mTLS de back-end.

      gcloud certificate-manager certificates create CLIENT_ CERTIFICATE_NAME \
          --certificate-file=client.cert \
          --private-key-file=client.key \
          --scope=client-auth \
          --global
      

      Substitua:

      • CLIENT_CERTIFICATE_NAME: o nome do recurso de certificado do cliente. Esse certificado do cliente com o escopo client-auth é usado pelo recurso de configuração de autenticação de back-end.

    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 Google Cloud , acesse a página Configuração de autenticação.

      Acessar "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. Selecione o recurso de certificado do cliente que você criou.
    5. Opcional: selecione as raízes de confiança públicas.
    6. Selecione o recurso de configuração de confiança que você criou antes.
    7. Clique em Criar.

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

    gcloud

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

      Anexe o certificado do cliente ao recurso Configuração de autenticação de back-end para ativar o mTLS de 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
      clientCertificate: projects/PROJECT_ID/locations/global/certificates/CLIENT_ CERTIFICATE_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 está definido.
      • PROJECT_ID: o ID do seu Google Cloud projeto
      • 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 que você criou anteriormente.
      • CLIENT_CERTIFICATE_NAME: o nome do recurso de certificado do cliente que você criou anteriormente.
    2. Para importar o recurso de configuração de autenticação de back-end, use o comando gcloud network-security backend-authentication-configs import:

      gcloud 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 de back-end.

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: o nome do arquivo YAML em que o recurso Backend Authentication Config está definido.

    Anexe 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 em que você precisa ativar o TLS autenticado de back-end e o mTLS de back-end.

    3. Clique em Editar.

    4. Expanda 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 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.

    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 seu 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 substituir esses valores por valores reais 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 projeto Google Cloud

      • BACKEND_AUTH_CONFIG_NAME: o nome do recurso de configuração de autenticação de 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 de servidor de back-end

    Nesta seção, fornecemos 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 à â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 para certificados de 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 a 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 a CSR para emitir o certificado do servidor X.509 (server.cert). A CSR é assinada 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 de back-end.

    Outras opções de configuração de SSL em um servidor da Web Apache

    Esta seção opcional mostra o processo para atualizar as opções de configuração SSL em um servidor Apache com base nos certificados de cliente e servidor criados anteriormente.

    1. Copie a chave privada do servidor (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. Faça upload do certificado do cliente para a configuração de confiança do servidor para validar o certificado do cliente.

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

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

    3. Atualize a configuração 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
          ----
          

      Atualize a configuração SSL do Apache para exigir a autenticação do certificado do cliente e especifique o certificado da CA para validação.

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLVerifyClient require
          SSLVerifyDepth 5
          SSLCACertificateFile /etc/ssl/certs/client.cert
          ----
          
    4. Faça um rehash dos certificados de CA.

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

          sudo systemctl restart apache2.service
          

    A seguir