Migre certificados de terceiros para o Gestor de certificados

Este tutorial mostra como migrar certificados de terceiros para um Google Cloud equilibrador de carga através do Gestor de certificados.

Para migrar certificados de terceiros sem período de inatividade, crie o mesmo número de certificados geridos pela Google que os seus certificados de terceiros. Em seguida, consolide os certificados num único mapa de certificados e implemente o mapa de certificados num equilibrador de carga através do DNS. Por último, atualize os registos A e AAAA de DNS para apontarem para o endereço IP do balanceador de carga.

Para encontrar a lista de equilibradores de carga suportados, consulte o artigo Vista geral do Gestor de certificados.

Crie certificados geridos pela Google

Crie o mesmo número de certificados geridos pela Google com autorização DNS (recomendado) ou certificados autogestores que os certificados de terceiros. Antes de criar os certificados, crie uma autorização de DNS e adicione o registo CNAME à zona de DNS autoritativa do seu domínio.

Esta secção apresenta os passos e os comandos para criar certificados globais geridos pela Google. Para criar certificados geridos pela Google regionais ou entre regiões, consulte o artigo Criar um certificado gerido pela Google.

Crie uma autorização de DNS

Uma autorização de DNS abrange apenas um único nome de domínio. Tem de criar uma autorização de DNS separada para cada nome de domínio que quer usar com o certificado de destino.

Se estiver a criar uma autorização de DNS para um certificado de caráter universal, como *.myorg.example.com, configure a autorização de DNS para o domínio principal, por exemplo, myorg.example.com.

Consola

Pode criar uma autorização de DNS ou anexar uma autorização de DNS existente quando cria um certificado. Para mais informações, consulte o artigo Crie um certificado gerido pela Google que faça referência à autorização de DNS.

gcloud

Pode criar dois tipos de autorizações de DNS: FIXED_RECORD ou PER_PROJECT_RECORD. Para mais informações, consulte o artigo Autorização de DNS.

Autorização de DNS FIXED_RECORD

Para criar uma FIXED_RECORDautorização de DNS, use o seguinte gcloud certificate-manager dns-authorizations createcomando:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type=[FIXED_RECORD]

Substitua o seguinte:

  • AUTHORIZATION_NAME: o nome da autorização de DNS.
  • DOMAIN_NAME: o nome do domínio de destino para o qual está a criar esta autorização de DNS. O nome do domínio tem de ser um nome do domínio totalmente qualificado, como myorg.example.com.

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

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

O resultado é semelhante ao seguinte. No resultado, encontre a secção dnsResourceRecord. Localize o registo CNAME e adicione os detalhes do registo (data, name e type) à 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'

Autorização de DNS PER_PROJECT_RECORD

Para criar uma PER_PROJECT_RECORDautorização de DNS, use o seguinte gcloud certificate-manager dns-authorizations createcomando:

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

Substitua o seguinte:

  • AUTHORIZATION_NAME: o nome da autorização de DNS.
  • DOMAIN_NAME: o nome do domínio de destino para o qual está a criar esta autorização de DNS. O nome do domínio tem de ser um nome do domínio totalmente qualificado, como myorg.example.com.

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

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

O resultado é semelhante ao seguinte. No resultado, encontre a secção dnsResourceRecord. Localize o registo CNAME e adicione os detalhes do registo (data, name e type) à 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_ujmmovf2vn55tgye.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, pode usar 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 os comandos básicos do Terraform.

API

Para criar uma autorização de DNS, faça um pedido 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 o seguinte:

  • PROJECT_ID: o ID do Google Cloud projeto.
  • AUTHORIZATION_NAME: o nome da autorização de DNS.
  • DOMAIN_NAME: o nome do domínio de destino para o qual está a criar esta autorização de DNS. O nome do domínio tem de ser um nome do domínio totalmente qualificado, como myorg.example.com.

Crie um certificado gerido pela Google que faça referência à autorização de DNS

Para criar um certificado global gerido pela Google que faça referência à autorização de DNS que criou nos passos anteriores, faça o seguinte:

Consola

  1. Na Google Cloud consola, aceda à página Gestor de certificados.

    Aceda ao Gestor de certificados

  2. No separador Certificados, clique em Adicionar certificado.

  3. No campo Nome do certificado, introduza um nome exclusivo para o certificado.

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

  5. Para Localização, selecione Global.

  6. Para Âmbito, selecione Predefinição.

  7. Para Tipo de certificado, selecione Criar certificado gerido pela Google.

  8. Para Tipo de autoridade de certificação, selecione Público.

  9. No campo Nomes de domínios, especifique uma lista de nomes de domínios do certificado separados por vírgulas. Cada nome do domínio tem de ser um nome do domínio totalmente qualificado, como myorg.example.com. O nome do domínio também pode ser um nome de domínio com carateres universais, como *.example.com.

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

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

    1. Clique em Criar autorização de DNS em falta.
    2. No campo Nome da autorização de DNS, especifique o nome da autorização de DNS. O tipo de autorização de DNS predefinido é FIXED_RECORD. Para gerir certificados de forma independente em vários projetos, selecione a caixa de verificação Autorização por projeto.
    3. Clique em Criar autorização de DNS.
  11. No campo Etiquetas, especifique as etiquetas a associar ao certificado. Para adicionar uma etiqueta, clique em Adicionar etiqueta e especifique uma chave e um valor para a etiqueta.

  12. Clique em Criar.

    O novo certificado é apresentado na lista de certificados.

gcloud

Para criar um certificado global gerido pela 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 o seguinte:

  • CERTIFICATE_NAME: o nome do certificado.
  • DOMAIN_NAME: o nome do domínio de destino. O nome do domínio tem de ser um nome do domínio totalmente qualificado, como myorg.example.com, ou um domínio de caráter universal, como *.myorg.example.com. O prefixo de ponto com asterisco (*.) significa um certificado de caráter universal.
  • AUTHORIZATION_NAMES: uma lista de nomes das autorizações de DNS que criou para o certificado, separada por vírgulas.

Terraform

Use um google_certificate_manager_certificate recurso.

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 um pedido POST ao método certificates.create da seguinte forma:

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 o seguinte:

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

Adicione o registo CNAME à configuração do DNS

Se estiver a usar uma solução DNS de terceiros para gerir o seu DNS, consulte a respetiva documentação para adicionar o registo CNAME à configuração do DNS. Se estiver a usar o Google Cloud para gerir o seu DNS, conclua os passos nesta secção.

Consola

Para criar um conjunto de registos, siga estes passos:

  1. Na Google Cloud consola, aceda à página Zonas de DNS.

    Aceda às zonas do Cloud DNS

  2. Clique no nome da zona DNS onde quer adicionar o registo.

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

  4. Na página Create record set, no campo DNS name, introduza o subdomínio da zona DNS.

    Ao introduzir o nome do subdomínio, certifique-se de que o nome do subdomínio, incluindo o texto esbatido apresentado no campo Nome DNS, corresponde ao valor completo do campo dnsResourceRecord.name, conforme apresentado no resultado do comando gcloud certificate-manager dns-authorizations describe.

    Veja os exemplos seguintes:

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

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

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

  5. No campo Tipo de registo de recursos, selecione CNAME.

  6. No campo TTL, introduza um valor numérico positivo para o tempo de vida do registo de recursos, que é o período durante o qual pode ser armazenado em cache.

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

  8. No campo Nome canónico, introduza o valor completo do campo dnsResourceRecord.data, conforme apresentado no resultado do comando gcloud certificate-manager dns-authorizations describe.

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

  10. Clique em Criar.

gcloud

Quando cria uma autorização de DNS, o comando da CLI gcloud devolve o registo CNAME correspondente. Para adicionar o registo CNAME à configuração do DNS na zona de DNS do domínio de destino, siga estes passos:

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

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

    Substitua DNS_ZONE_NAME pelo nome da zona DNS de destino.

  2. Adicione o registo 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 o seguinte:

    • CNAME_RECORD: o valor de dados completo do registo CNAME devolvido pelo comando da CLI Google Cloud que criou a autorização DNS correspondente.
    • VALIDATION_SUBDOMAIN_NAME: o subdomínio do prefixo da zona DNS, como _acme-challenge. Pode copiar o nome do registo TXT do registo de comandos, conforme descrito em Crie uma autorização de DNS.gcloud certificate-manager dns-authorizations describe
    • DOMAIN_NAME: o nome do domínio de destino.O nome do domínio tem de ser um nome do domínio totalmente qualificado, como myorg.example.com. Também tem de incluir o ponto final após o nome do domínio de destino.
    • DNS_ZONE_NAME: o nome da zona DNS de destino.

    Para mais informações acerca da diferença entre as autorizações de DNS FIXED_RECORD e PER_PROJECT_RECORD, consulte os seguintes exemplos. A única diferença entre os dois exemplos é o valor da flag --name.

    Autorização de DNS FIXED_RECORD

    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"
    

    Autorização de DNS PER_PROJECT_RECORD

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

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

    Substitua DNS_ZONE_NAME pelo nome da zona DNS de destino.

Terraform

Para adicionar o registo CNAME à configuração do DNS, pode usar um google_dns_record_set recurso.

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]
}

Valide o estado do certificado

Antes de implementar um certificado num equilibrador de carga, verifique se está ativo. O estado do certificado pode demorar vários minutos a mudar para ACTIVE.

Consola

  1. Na Google Cloud consola, aceda à página Gestor de certificados.

    Aceda ao Gestor de certificados

  2. No separador Certificados, verifique a coluna Estado do certificado.

gcloud

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

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Substitua CERTIFICATE_NAME pelo nome do certificado gerido pela Google de destino.

O resultado é semelhante ao seguinte:

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 adicionou corretamente o registo CNAME à configuração de DNS.

Para ver mais passos de resolução de problemas, consulte o artigo Resolva problemas do Gestor de certificados.

Implemente o certificado num balanceador de carga

Para implementar um certificado gerido pela Google global, siga os passos nesta secção e implemente o certificado através de um mapa de certificados.

Para implementar o certificado gerido pela Google num balanceador de carga de aplicações externo regional ou num balanceador de carga de aplicações interno regional, ou para um balanceador de carga de aplicações interno entre regiões, anexe-o diretamente ao proxy de destino.

Crie um mapa de certificados

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

gcloud

Para criar um mapeamento de certificados, 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 certificados de destino.

Terraform

Para criar um mapa de certificados, pode usar 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
  }
}

Crie uma entrada de mapeamento de certificados

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

gcloud

Para criar uma entrada de mapeamento de certificados, 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 o seguinte:

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

    Se quiser criar um certificado que abranja um domínio com caráter universal e um domínio raiz, especifique o nome do anfitrião com uma raiz e um caráter universal, como example.com e *.example.com. Além disso, tem de especificar duas entradas de mapeamento de certificados: uma para example.com e outra para *.example.com.

Terraform

Para criar uma entrada de mapa de certificados com um domínio raiz, 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
}

Para criar uma entrada de mapeamento de certificados com um domínio de caráter universal, use um recurso google_certificate_manager_certificate_map_entry.

resource "google_certificate_manager_certificate_map_entry" "second_entry" {
  name        = "${local.name}-second-entity-${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}"
}

Verifique se a entrada do mapeamento de certificados está ativa

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

Para validar 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 o seguinte:

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

O resultado é semelhante ao seguinte:

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'

Associe o mapa de certificados ao proxy de destino

Pode anexar o mapa de certificados a um novo proxy de destino ou a um proxy de destino existente.

gcloud

Para anexar o mapeamento de certificados 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 o seguinte:

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

Para anexar o mapa de certificados a um proxy HTTPS de destino existente, use o comando gcloud compute target-https-proxies update. Se não souber o nome do proxy de destino existente, aceda à página Proxies de destino e anote o nome do proxy de destino.

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 o verificar:

gcloud compute target-https-proxies list

Terraform

Para anexar o mapeamento de certificados ao proxy de destino, pode usar um recurso google_compute_target_https_proxy.

Quando configura um proxy de destino, se anexar certificados TLS (SSL) diretamente e também através de um mapa de certificados, o proxy usa os certificados referenciados pelo mapa de certificados e ignora os certificados TLS (SSL) anexados diretamente.

Teste os certificados implementados

Para cada certificado implementado, teste a conetividade a cada domínio coberto pelo certificado no endereço IP do seu equilibrador de carga através do seguinte comando:

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

Substitua o seguinte:

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

Para mais informações sobre como testar a conetividade, consulte o artigo Teste com o OpenSSL

Atualize os registos de DNS

Mude o tráfego do seu serviço de terceiros para o Cloud Load Balancing. Consulte o artigo Atualize os registos A e AAAA do DNS para apontarem para o endereço IP do balanceador de carga.