Migrar certificados de terceiros para o Gerenciador de certificados


Neste tutorial, mostramos como migrar certificados de terceiros para um balanceador de cargaGoogle Cloud usando o Gerenciador de certificados.

Para migrar certificados de terceiros sem tempo de inatividade, crie o mesmo número de certificados gerenciados pelo Google que seus certificados de terceiros. Em seguida, consolide os certificados em um único mapa de certificados e implante o mapa de certificados em um balanceador de carga usando o DNS. Por fim, atualize os registros DNS A e AAAA para apontar para o endereço IP do balanceador de carga.

Para encontrar a lista de balanceadores de carga compatíveis, consulte Visão geral do Gerenciador de certificados.

Objetivos

Nesta seção, mostramos como concluir as seguintes tarefas:

  • Crie certificados gerenciados pelo Google com autorização de DNS.
  • Crie um mapa de certificados para todos os certificados.
  • Implante certificados no balanceador de carga usando o DNS.
  • Atualize os registros DNS A e AAAA para apontar para o endereço IP do balanceador de carga.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Funções exigidas

Confira se você tem os seguintes papéis para concluir as tarefas deste tutorial:

  • Proprietário do Gerenciador de certificados (roles/certificatemanager.owner)

    Necessário para criar e gerenciar recursos do Gerenciador de certificados.

  • Administrador do balanceador de carga do Compute (roles/compute.loadBalancerAdmin) ou administrador da rede do Compute (roles/compute.networkAdmin)

    É necessário para criar e gerenciar o proxy de destino HTTPS.

  • Administrador do DNS (roles/dns.admin)

    Obrigatório se você quiser usar o Cloud DNS como solução de DNS.

Para ver mais informações, consulte os seguintes tópicos:

Criar certificados gerenciados pelo Google

Crie o mesmo número de certificados gerenciados pelo Google com autorização do DNS (recomendado) ou certificados autogerenciados como certificados de terceiros. Antes de criar os certificados, crie uma autorização de DNS e adicione o registro CNAME à zona de DNS autoritativa do seu domínio.

Esta seção lista etapas e comandos para criar certificados globais gerenciados pelo Google. Para criar certificados gerenciados pelo Google regionais ou em várias regiões, consulte Criar um certificado gerenciado pelo Google.

Criar uma autorização de DNS

Uma autorização de DNS abrange apenas um nome de domínio. É necessário criar uma autorização DNS separada para cada nome de domínio que você quer usar com o certificado alvo.

Se você estiver criando uma autorização de DNS para um certificado curinga, como *.myorg.example.com, configure a autorização de DNS para o domínio pai, por exemplo, myorg.example.com.

Console

É possível criar uma autorização DNS ou anexar uma autorização DNS existente ao criar um certificado. Para mais informações, consulte Criar um certificado gerenciado pelo Google que faça referência à autorização DNS.

gcloud

Para criar uma autorização de DNS, use o comando certificate-manager dns-authorizations create:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME"

Substitua:

  • AUTHORIZATION_NAME: o nome da autorização de DNS.
  • DOMAIN_NAME: o nome do domínio de destino para o qual você está criando essa autorização de DNS. O nome de domínio precisa ser totalmente qualificado, como myorg.example.com.

Os certificados globais gerenciados pelo Google usam FIXED_RECORD como o tipo de autorização de DNS padrão. Para usar a autorização de DNS PER_PROJECT_RECORD, execute o seguinte comando:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type="PER_PROJECT_RECORD"

Depois de criar a autorização de DNS, verifique-a com o comando certificate-manager dns-authorizations describe:

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME \

A resposta será semelhante a esta: Na saída, encontre a linha dnsResourceRecord e extraia o registro CNAME (data, name e type) para adicionar à sua configuração de DNS.

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
  data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
  name: _acme-challenge.myorg.example.com.
  type: CNAME
domain: myorg.example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

Terraform

Para criar uma autorização de DNS, use um recurso google_certificate_manager_dns_authorization.

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

API

Para criar uma autorização DNS, faça uma solicitação POST ao método dnsAuthorizations.create:

POST /v1/projects/PROJECT_ID/locations/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME"
{
  "domain": "DOMAIN_NAME",
  "type": "PER_PROJECT_RECORD" //optional
}

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • AUTHORIZATION_NAME: o nome da autorização de DNS.
  • DOMAIN_NAME: o nome do domínio de destino para o qual você está criando essa autorização de DNS. O nome de domínio precisa ser totalmente qualificado, como myorg.example.com.

Criar um certificado gerenciado pelo Google que faça referência à autorização DNS

Para criar um certificado gerenciado pelo Google global que faça referência à autorização DNS criada nas etapas anteriores, faça o seguinte:

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. No campo Nome do certificado, insira um nome exclusivo para o certificado.

  4. Opcional: no campo Descrição, insira uma descrição para o certificado. A descrição permite identificar o certificado.

  5. Em Local, selecione Global.

  6. Em Escopo, selecione Padrão.

  7. Em Tipo de certificado, selecione Criar certificado gerenciado pelo Google.

  8. Em Tipo de autoridade certificadora, selecione Pública.

  9. No campo Domain Names, especifique uma lista delimitada por vírgulas de nomes de domínio do certificado. Cada nome de domínio precisa ser um nome de domínio totalmente qualificado, como myorg.example.com. O nome de domínio também pode ser um nome de domínio curinga, como *.example.com.

  10. Em Tipo de autorização, selecione Autorização DNS.

    A página lista as autorizações de DNS dos nomes de domínio. Se um nome de domínio não tiver uma autorização de DNS associada, siga estas etapas para criar uma:

    1. Clique em Criar autorização de DNS ausente.
    2. No campo DNS authorization name, especifique o nome da autorização DNS. O tipo de autorização de DNS padrão é FIXED_RECORD. Para gerenciar certificados de forma independente em vários projetos, marque a caixa de seleção Per project authorization.
    3. Clique em Criar autorização de DNS.
  11. No campo Rótulos, especifique os rótulos a serem associados ao certificado. Para adicionar um rótulo, clique em Adicionar rótulo e especifique uma chave e um valor para o rótulo.

  12. Clique em Criar.

    O novo certificado aparece na lista de certificados.

gcloud

Para criar um certificado global gerenciado pelo Google com autorização de DNS, execute o comando certificate-manager certificates create com a flag dns-authorizations:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAME, *.DOMAIN_NAME" \
    --dns-authorizations="AUTHORIZATION_NAMES"

Substitua:

  • CERTIFICATE_NAME: o nome do certificado.
  • DOMAIN_NAME: o nome do domínio de destino. O nome de domínio precisa ser totalmente qualificado, como myorg.example.com, ou um domínio curinga, como *.myorg.example.com. O prefixo de ponto de asterisco (*.) indica um certificado curinga.
  • AUTHORIZATION_NAMES: uma lista delimitada por vírgulas dos nomes das autorizações DNS criadas para o certificado.

Terraform

Use um recurso google_certificate_manager_certificate.

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

API

Crie o certificado fazendo uma solicitação POST ao método certificates.create da seguinte maneira:

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "dnsAuthorizations": [
   "projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME",
  ],
 }
}

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • CERTIFICATE_NAME: o nome do certificado.
  • DOMAIN_NAME: o nome do domínio de destino. O nome de domínio precisa ser totalmente qualificado, como myorg.example.com, ou um domínio curinga, como *.myorg.example.com. O prefixo de ponto de asterisco (*.) significa um certificado curinga.
  • AUTHORIZATION_NAMES: uma lista delimitada por vírgulas de nomes das autorizações DNS.

Adicionar o registro CNAME à configuração de DNS

Se você estiver usando uma solução de DNS de terceiros para gerenciar seu DNS, consulte a documentação dela para adicionar o registro CNAME à configuração de DNS. Se você estiver usando o Google Cloud para gerenciar seu DNS, siga as etapas desta seção.

Console

Para criar um conjunto de registros, siga estas etapas:

  1. No console do Google Cloud, acesse a página Zonas de DNS.

    Acessar zonas do Cloud DNS

  2. Clique no nome da zona de DNS em que você quer adicionar o registro.

  3. Na página Detalhes da zona, clique em Adicionar padrão.

  4. Na página Criar conjunto de registros, no campo Nome do DNS, insira o subdomínio da zona de DNS.

    Ao inserir o nome do subdomínio, verifique se o nome do subdomínio, incluindo o texto esmaecido exibido no campo Nome do DNS, corresponde ao valor completo do campo dnsResourceRecord.name, conforme mostrado na saída do comando gcloud certificate-manager dns-authorizations describe.

    Veja os exemplos a seguir:

    • Se o valor do campo dnsResourceRecord.name for _acme-challenge.myorg.example.com. e o texto esmaecido no campo Nome do DNS for .example.com., digite _acme-challenge.myorg.

    • Se o valor do campo dnsResourceRecord.name for _acme-challenge.myorg.example.com. e o texto esmaecido no campo Nome do DNS for .myorg.example.com., digite _acme-challenge.

    • Se o valor do campo dnsResourceRecord.name for _acme-challenge_ujmmovf2vn55tgye.myorg.example.com. e o texto esmaecido no campo Nome do DNS for .myorg.example.com., digite _acme-challenge_ujmmovf2vn55tgye.

  5. No campo Tipo de registro de recurso, selecione CNAME.

  6. No campo TTL, insira um valor numérico positivo para o time to live (TTL) do registro de recursos, que é o tempo que ele pode ser armazenado em cache.

  7. Na lista Unidade TTL, selecione a unidade de tempo. Por exemplo, 30 minutes.

  8. No campo Nome canônico, insira o valor completo do campo dnsResourceRecord.data conforme mostrado na saída do comando gcloud certificate-manager dns-authorizations describe.

  9. Para inserir informações adicionais, clique em Adicionar item.

  10. Clique em Criar.

gcloud

Ao criar uma autorização de DNS, o comando da CLI gcloud retorna o registro CNAME correspondente. Para adicionar o registro CNAME à configuração de DNS na zona DNS do domínio de destino, siga estas etapas:

  1. Inicie a transação do registro DNS:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Substitua DNS_ZONE_NAME pelo nome da zona de DNS de destino.

  2. Adicione o registro CNAME à zona DNS de destino:

    gcloud dns record-sets transaction add CNAME_RECORD \
        --name="VALIDATION_SUBDOMAIN_NAME.DOMAIN_NAME." \
        --ttl="30" \
        --type="CNAME" \
        --zone="DNS_ZONE_NAME"
    

    Substitua:

    • CNAME_RECORD: o valor de dados completo do registro CNAME retornado pelo comando da CLI do Google Cloud que criou a autorização DNS correspondente.
    • VALIDATION_SUBDOMAIN_NAME: o subdomínio de prefixo da zona DNS, como _acme-challenge. Você pode copiar o nome do registro de comando gcloud certificate-manager dns-authorizations describe, conforme descrito em Criar uma autorização de DNS.
    • DOMAIN_NAME: o nome do domínio de destino.O nome de domínio precisa ser totalmente qualificado, como myorg.example.com. Você também precisa incluir o ponto final após o nome de domínio de destino.
    • DNS_ZONE_NAME: o nome da zona de DNS de destino.

    Veja o exemplo a seguir:

    gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
        --name="_acme-challenge.myorg.example.com." \
        --ttl="30" \
        --type="CNAME" \
        --zone="myorg-example-com"
    
  3. Execute a transação do registro DNS para salvar as alterações:

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    Substitua DNS_ZONE_NAME pelo nome da zona de DNS de destino.

Terraform

Para adicionar o registro CNAME à configuração de DNS, use um recurso google_dns_record_set.

resource "google_dns_record_set" "cname" {
  name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
  managed_zone = google_dns_managed_zone.default.name
  type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
  ttl          = 300
  rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
}

Verificar o status do certificado

Antes de implantar um certificado em um balanceador de carga, verifique se ele está ativo. Pode levar vários minutos para que o estado do certificado mude para ACTIVE.

Console

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

    Acessar o Gerenciador de certificados

  2. Na guia Certificados, verifique a coluna Status do certificado.

gcloud

Para verificar o status do certificado, execute o seguinte comando:

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Substitua CERTIFICATE_NAME pelo nome do certificado gerenciado pelo Google de destino.

O resultado será assim:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  - domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
    - projects/myProject/locations/global/dnsAuthorizations/myCert
  domains:
  - myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
  -   myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

Se o estado do certificado não for ACTIVE após várias horas, verifique se você adicionou corretamente o registro CNAME à configuração do DNS.

Para mais etapas de solução de problemas, consulte Solução de problemas do Gerenciador de certificados.

Implantar o certificado em um balanceador de carga

Para implantar um certificado global gerenciado pelo Google, siga as etapas desta seção e implante o certificado usando um mapa de certificados.

Para implantar o certificado gerenciado pelo Google em um balanceador de carga de aplicativo externo regional ou regional interno ou em um balanceador de carga de aplicativo interno entre regiões, anexe-o diretamente ao proxy de destino.

Criar um CertificateMap

Crie um mapa de certificados que faça referência à entrada de mapa de certificados associada ao seu certificado:

gcloud

Para criar um mapa de certificado, use o comando gcloud certificate-manager maps create:

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Substitua CERTIFICATE_MAP_NAME pelo nome do mapa de certificado de destino.

Terraform

Para criar um mapa de certificado, use um recurso google_certificate_manager_certificate_map.

resource "google_certificate_manager_certificate_map" "certificate_map" {
  name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

Criar uma entrada do mapa de certificados

Crie uma entrada de mapa de certificados e a associe ao seu certificado e ao mapa de certificados:

gcloud

Para criar uma entrada de mapa de certificado, use o comando gcloud certificate-manager maps entries create:

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME" \
    --certificates="CERTIFICATE_NAME" \
    --hostname="HOSTNAME"

Substitua:

  • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados.
  • CERTIFICATE_MAP_NAME: o nome do mapa de certificados ao qual a entrada do mapa de certificados está anexada.
  • CERTIFICATE_NAME: o nome do certificado que você quer associar à entrada do mapa de certificados.
  • HOSTNAME: o nome do host que você quer associar à entrada do mapa de certificados.

    Se você estiver criando certificados com um domínio curinga, especifique o nome do host com um curinga também, como *.example.com.

Terraform

Para criar uma entrada de mapa de certificado, use um recurso google_certificate_manager_certificate_map_entry.

resource "google_certificate_manager_certificate_map_entry" "first_entry" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = local.domain
}

Verificar se a entrada do mapa de certificados está ativa

Verifique se a entrada do mapa de certificados está ativa antes de anexar o mapa de certificado correspondente ao proxy de destino.

Para verificar a entrada do mapa de certificados, use o comando gcloud certificate-manager maps entries describe:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

Substitua:

  • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados.
  • CERTIFICATE_NAME: o nome do certificado que você quer associar à entrada do mapa de certificados.

O resultado será assim:

certificates:
createTime: '2021-09-06T10:01:56.229472109Z'
hostname: example.com
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

Anexar o mapa de certificado ao proxy de destino

É possível anexar o mapa de certificado a um novo proxy de destino ou a um proxy de destino existente.

gcloud

Para anexar o mapa de certificado a um novo proxy de destino, use o comando gcloud compute target-https-proxies create:

gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --url-map="URL_MAP" \
    --global

Substitua:

  • PROXY_NAME: o nome do proxy de destino.
  • CERTIFICATE_MAP_NAME: o nome do mapa de certificado que faz referência à entrada do mapa de certificado e ao certificado associado.
  • URL_MAP: o nome do mapa de URL

Para anexar o mapa de certificado a um proxy HTTPS de destino, use o comando gcloud compute target-https-proxies update. Se você não souber o nome do proxy de destino atual, acesse a página Proxy de destino e anote o nome dele.

gcloud compute target-https-proxies update PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --global

Depois de criar ou atualizar o proxy de destino, execute o seguinte comando para verificar:

gcloud compute target-https-proxies list

Terraform

Para anexar o mapa de certificado ao proxy de destino, use um recurso google_compute_target_https_proxy.

Ao configurar um proxy de destino, se você anexar certificados TLS (SSL) diretamente e também por um mapa de certificados, o proxy usará os certificados referenciados pelo mapa de certificados e ignorará os certificados TLS (SSL) anexados diretamente.

Testar os certificados implantados

Para cada certificado implantado, teste a conectividade com cada domínio coberto pelo certificado no endereço IP do balanceador de carga usando o seguinte comando:

openssl s_client -showcerts -servername DOMAIN_NAME -connect IP_ADDRESS:443

Substitua:

  • DOMAIN_NAME: o nome do domínio de destino
  • IP_ADDRESS: o endereço IP do balanceador de carga

Para mais informações sobre como testar a conectividade, consulte Testar com o OpenSSL.

Atualizar registros DNS

Mude o tráfego do serviço de terceiros para o Cloud Load Balancing. Consulte Atualizar os registros DNS A e AAAA para apontar para o endereço IP do balanceador de carga.

A seguir