Configurar o mTLS de back-end

Esta página fornece 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 do back-end são semelhantes ao TLS autenticado do back-end, exceto que você também precisa criar um certificado para o balanceador de carga. Esse certificado, também conhecido como certificado do cliente, é anexado ao recurso de configuração de autenticação do back-end. O balanceador de carga usa esse certificado de cliente para se autenticar nos back-ends.

Para configurar o back-end mTLS, faça o seguinte:

  • Crie um recurso de configuração de confiança que consiste em certificados raiz e intermediários.
  • Crie um certificado do cliente e faça upload dele para o Gerenciador de certificados.
  • 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.
  • 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 projeto do Google Cloud de destino
Criar um certificado do cliente certificatemanager.certs.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 mTLS de back-end com base na arquitetura mostrada no diagrama abaixo:

    Componentes do mTLS de back-end.
    Componentes de mTLS 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 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 do 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) para o nome de host especificado na configuração de TLS. O servidor de back-end seleciona o certificado SSL/TLS apropriado com base nesse valor de SNI. O balanceador de carga espera que o valor do SNI corresponda a um nome alternativo do sujeito (SAN, na sigla em inglês) listado no certificado do servidor de back-end.

    Os certificados do cliente podem ser certificados gerenciados de uma AC particular pelo Certificate Authority Service ou certificados de ICP particulares autogerenciados. Neste exemplo, o certificado do cliente é emitido usando certificados autogerenciados. Esta seção usa a biblioteca OpenSSL para criar o certificado de AC 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 certificadora (AC). O atributo extendedKeyUsage está definido como clientAuth. Para saber mais sobre os requisitos de certificados raiz e intermediários, consulte Requisitos de certificados.

        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 AC 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 o 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 no CSR. Para saber mais sobre os requisitos de 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) a partir do CSR. O CSR é assinado pelo certificado da AC raiz para emitir o certificado de 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 no Gerenciador de certificados

    Para fazer o upload do certificado do cliente no Gerenciador de certificados, 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 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. Para o campo Certificado de chave privada, faça upload de uma chave privada codificada em PEM que não esteja protegida por 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. É possível adicionar mais de um rótulo, 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 desse 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 de 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 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. Selecione o recurso de certificado do cliente que você criou anteriormente.
    5. Opcional: selecione as raízes de confiança públicas.
    6. Selecione o recurso de configuração de confiança criado anteriormente.
    7. 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.

      Anexe o certificado do cliente ao recurso de 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 é 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.
      • CLIENT_CERTIFICATE_NAME: o nome do recurso de certificado de cliente que você criou 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ê sobre como atualizar as opções de configuração do SSL em um servidor Apache com base nos certificados de cliente e 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. 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 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
          ----
          

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

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLVerifyClient require
          SSLVerifyDepth 5
          SSLCACertificateFile /etc/ssl/certs/client.cert
          ----
          
    4. Refazer o hash dos certificados de AC.

          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