Configurar certificados SSL (TLS)

Depois de criar um serviço de CDN de mídia (ou serviços), você pode emitir e anexar certificados SSL (TLS) para oferecer suporte à conectividade segura em navegadores e aplicativos para dispositivos móveis.

Emitir um certificado gerenciado

Para criar um certificado gerenciado e anexá-lo ao serviço de CDN de mídia, faça o seguinte:

  1. Demonstre a propriedade ("autorização") dos domínios para os quais você quer emitir certificados criando um token de desafio e adicionando um registro DNS.
  2. Crie um certificado do tipo EDGE_CACHE com um ou mais nomes de domínio com base nessa autorização.
  3. Anexe esse certificado a um ou mais serviços de armazenamento em cache de borda.

Você precisa das seguintes permissões do Identity and Access Management para autorizar, criar e anexar certificados a um serviço de armazenamento em cache de borda:

  • certificatemanager.certs.create
  • certificatemanager.certs.get
  • certificatemanager.certs.list
  • certificatemanager.certs.use
  • certificatemanager.dnsauthorizations.create
  • certificatemanager.dnsauthorizations.get
  • certificatemanager.dnsauthorizations.list
  • certificatemanager.dnsauthorizations.use

Os usuários que precisam anexar um certificado existente a um serviço de CDN de mídia precisam das permissões do IAM certificatemanager.certs.get, certificatemanager.certs.list e certificatemanager.certs.use.

Antes de começar

Criar uma autorização de DNS

Primeiro, crie uma autorização de DNS para demonstrar a propriedade do domínio antes de emitir certificados para ele. A autorização de DNS usa o DNS-01 ACME desafio e permite emitir um certificado antes de direcionar o tráfego voltado ao usuário para o serviço de armazenamento em cache de borda.

Defina o valor de domain como o nome de domínio para o qual você pretende criar um certificado, da seguinte maneira:

gcloud

Use o comando gcloud certificate-manager dns-authorizations:

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

A CLI gcloud retorna uma resposta com os detalhes do registro DNS que você precisa adicionar.

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

Terraform

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "example-dns-auth"
  description = "example dns authorization "
  domain      = "test.example.com"
}

Se você estiver usando o Cloud DNS para seu domínio, consulte as etapas para adicionar um novo registro ao domínio hospedado. Se você estiver usando outro provedor de DNS, consulte a documentação dele para adicionar um registro CNAME.

  • Repita essa etapa para cada domínio em que você precisa emitir um certificado.
  • Os certificados podem conter vários domínios ou você pode emitir um certificado por domínio, conforme necessário. Depois de ter uma autorização para um domínio, você pode usá-la para emitir certificados.
  • Recomendamos criar menos certificados no total, cada um com todos os nomes de domínio usados para seu serviço. Isso melhora o desempenho do cliente ao usar vários domínios, porque os clientes podem se beneficiar da retomada de TLS com mais frequência.
  • Cada serviço de armazenamento em cache de borda pode referenciar até cinco certificados. Ao emitir menos certificados, você pode permanecer dentro desse limite.

Se você precisar recuperar os valores de registro DNS em uma data posterior, faça uma solicitação para o authorizationName fornecido ao criar a autorização de DNS:

Criar um certificado

Depois de adicionar o registro DNS que demonstra a propriedade dos domínios para os quais você quer criar um certificado, é possível emitir uma solicitação de criação de certificado.

A lista de dnsAuthorizations precisa corresponder aos nomes das autorizações criadas anteriormente no processo. Se você quiser adicionar vários domínios ao mesmo certificado, forneça uma lista de domains[] e dnsAuthorizations[] correspondentes ao fazer a solicitação.

Para criar um certificado usando uma autorização para test.example.com chamada test-example-com:

gcloud

Use o comando gcloud certificate-manager certificates:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAME" \
    --dns-authorizations="DOMAIN_NAME_AUTH" \
    --scope=EDGE_CACHE

Isso cria um certificado com cada autorização DNS no estado AUTHORIZING e o certificado no estado PROVISIONING:

Create request issued for: [DOMAIN_NAME]
Waiting for operation [projects/my-project/locations/global/operations/operatio
n-1613425627385-5bb66ed644e91-3e2a2f1f-71979cf8] to complete...done.
Created certificate [CERTIFICATE_NAME].

Terraform

resource "google_certificate_manager_certificate" "default" {
  name        = "example-dns-cert"
  description = "example dns certificate"
  scope       = "EDGE_CACHE"
  managed {
    domains = [
      google_certificate_manager_dns_authorization.default.domain,
    ]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id,
    ]
  }
}

A criação do certificado pode levar alguns minutos (e até uma hora) para ser concluída, dependendo do seguinte:

  • A velocidade com que o provedor de DNS propaga as mudanças de configuração.
  • O número de domínios que você está tentando validar e criar certificados.

O campo state mostra o status atual do certificado:

  • PROVISIONING : o certificado ainda está sendo provisionado. Isso provavelmente ocorre porque a solicitação de criação do certificado foi feita recentemente.
  • FALHA : retornado após várias tentativas de validar o domínio ou emitir o certificado. Para mais detalhes, consulte os campos provisioning_issue, authorization_attempt_info e failure_reason.
  • ACTIVE : o domínio foi validado e o certificado foi provisionado.

Para verificar o status do certificado:

gcloud

Use o comando gcloud certificate-manager certificates:

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Neste exemplo, a autorização DNS é AUTHORIZED e o estado do certificado é ACTIVE:

createTime: '2021-02-07T20:03:39.867762684Z'
expireTime: '2021-03-09T19:20:41Z'
managed:
  authorizationAttemptInfo:
  - domain: DOMAIN_NAME
    state: AUTHORIZED
  dnsAuthorizations:
  - projects/111111111111/locations/global/dnsAuthorizations/test-example-com
  domains:
  - DOMAIN_NAME
  state: ACTIVE
name: projects/my-project/locations/global/certificates/test-example-com
scope: EDGE_CACHE
subjectAlternativeNames:
- DOMAIN_NAME
updateTime: '2021-02-07T20:03:40.297242738Z'

Depois que o certificado estiver ACTIVE, você poderá anexá-lo a um serviço de armazenamento em cache de borda.

Anexar um certificado a um serviço

Depois de criar um certificado gerenciado, você pode associá-lo a um ou mais serviços de armazenamento em cache de borda. Os certificados podem ser anexados a serviços novos e atuais atualizando a lista de edgeSslCertificates no serviço.

Você precisa das seguintes permissões do IAM para anexar certificados a um serviço de armazenamento em cache de borda:

  • certificatemanager.certs.get
  • certificatemanager.certs.list
  • certificatemanager.certs.use
  • networkservices.edgeCacheServices.get
  • networkservices.edgeCacheServices.list
  • networkservices.edgeCacheServices.update

Para anexar um certificado a um serviço, siga estas etapas.

gcloud

Execute o comando gcloud edge-cache services export para exportar o arquivo YAML do serviço:

gcloud edge-cache services export SERVICE_NAME \
    --destination=my-service.yaml

Edite o arquivo YAML exportado para adicionar o certificado:

name: SERVICE_NAME
edgeSslCertificates:
- projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

Execute o comando gcloud edge-cache services import:

gcloud edge-cache services import SERVICE_NAME \
    --source=my-service.yaml

Saída:

Request issued for: [SERVICE_NAME]
Updated service [SERVICE_NAME]

O comando retorna uma descrição do serviço, incluindo a lista de edgeSslCertificates agora anexados:

  name: SERVICE_NAME
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

Depois de atualizar a configuração, o certificado será propagado para todos os locais de borda em minutos. Para testar se o certificado está associado ao serviço de armazenamento em cache de borda antes de fazer mudanças de DNS, emita uma solicitação para o endereço IPv4 ou IPv6 associado ao serviço.

Substituir e remover certificados

Os certificados podem ser adicionados e removidos atualizando a lista de certificados.

Ao usar a flag --edge-ssl-certificate da CLI gcloud, os certificados são apenas anexados à lista de certificados atuais e não substituídos. Isso evita que você remova um certificado válido e ativo por engano.

Para remover o certificado test-example-com do nosso serviço no exemplo a seguir, exporte o serviço para YAML usando os comandos de importação e exportação

  name: my-service
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/test-example-com
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

Os comandos a seguir mostram como exportar o serviço, remover a referência do certificado e importar o serviço atualizado.

gcloud

Use o comando gcloud edge-cache services:

gcloud edge-cache services export SERVICE_NAME --destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/SERVICE_NAME] to 'my-service.yaml'.

Remova os certificados que você não quer mais que o serviço use com seu editor de texto preferido:

  name: SERVICE_NAME
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

Salve o arquivo modificado e importe o serviço atualizado:

gcloud

Use o comando gcloud edge-cache services:

gcloud edge-cache services import SERVICE_NAME --source=my-service.yaml
Request issued for: [SERVICE_NAME]
Updated service [SERVICE_NAME].

Não há limite para o número de serviços a que um certificado pode ser associado, e cada serviço de armazenamento em cache de borda pode referenciar até cinco certificados.

Certificados autogerenciados

Você pode fazer o upload dos seus próprios certificados para a CDN de mídia se tiver casos de uso específicos que exigem isso.

Para fazer o upload de um certificado e da chave associada ao Certificate Manager:

gcloud

Use o comando gcloud certificate-manager certificates. Especifique --scope=EDGE_CACHE para certificados associados à CDN de mídia.

gcloud certificate-manager certificates create stream-example-com \
    --certificate-file=CERT.pem \
    --private-key-file=PRIVATE_KEY.pem \
    --scope=EDGE_CACHE
Create request issued for: [stream-example-com]
Created certificate [stream-example-com].

Depois que o certificado for enviado, você poderá anexá-lo a um EdgeCacheService como faria com um certificado gerenciado.

Resolver problemas de emissão de certificados

Consulte o guia de solução de problemas sobre como resolver erros comuns de autorização e emissão de certificados.

A seguir