Configurar certificados SSL/TLS

Después de crear un servicio de Media CDN, puedes emitir y adjuntar certificados SSL (TLS) para admitir una conectividad segura en navegadores y aplicaciones para dispositivos móviles.

Emite un certificado administrado

Para crear un certificado administrado y adjuntarlo al servicio de Media CDN, debes hacer lo siguiente:

  1. Para demostrar la propiedad (“autorización”) de los dominios para los que deseas emitir certificados, crea un token de desafío y agrega un registro DNS.
  2. Crea un certificado de tipo EDGE_CACHE con uno o más nombres de dominio en función de esa autorización.
  3. Adjunta ese certificado a uno o más servicios de almacenamiento en caché perimetral.

Debes tener los siguientes permisos de Identity and Access Management para autorizar, crear y adjuntar certificados a un servicio de almacenamiento en caché perimetral:

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

Los usuarios que necesiten adjuntar un certificado existente a un Media CDN servicio requieren certificatemanager.certs.get, certificatemanager.certs.list y certificatemanager.certs.use permisos de IAM.

Antes de comenzar

Crea una autorización de DNS

Primero, debes crear una autorización de DNS a fin de demostrar la propiedad del dominio antes de que puedas emitir certificados para él. La autorización de DNS usa el desafío DNS-01 ACME y te permite emitir un certificado antes de dirigir el tráfico orientado al usuario al servicio de almacenamiento en caché perimetral.

Configura el valor de domain como el nombre de dominio para el que deseas crear un certificado, de la siguiente manera:

gcloud

Usa el 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

La CLI de gcloud muestra una respuesta con los detalles del registro DNS que debes agregar.

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

Si usas Cloud DNS para tu dominio, consulta los pasos para agregar un registro nuevo a tu dominio alojado. Si usas otro proveedor de DNS, consulta su documentación para agregar un registro CNAME.

  • Puedes repetir este paso para cada dominio para el que necesites emitir un certificado.
  • Los certificados pueden contener varios dominios o puedes optar por emitir un certificado por dominio, según sea necesario. Después de tener una autorización para un dominio, puedes usarla para emitir certificados.
  • Recomendamos crear menos certificados totales, cada uno con todos los nombres de dominio que se usaron para el servicio. Esto mejora el rendimiento del cliente cuando se usan varios dominios, ya que los clientes pueden beneficiarse de la reanudación de TLS con más frecuencia.
  • Cada servicio de almacenamiento en caché perimetral puede hacer referencia hasta cinco certificados. Si emites menos certificados, puedes mantenerte dentro de este límite.

Si necesitas recuperar los valores del registro DNS en una fecha posterior, realiza una solicitud para el authorizationName que proporcionaste cuando creaste la autorización de DNS:

Crea un certificado

Después de agregar el registro DNS que demuestra la propiedad de los dominios para los que deseas crear un certificado, puedes emitir una solicitud de creación de certificado.

La lista de dnsAuthorizations debe coincidir con los nombres de las autorizaciones existentes que creaste antes en el proceso. Si deseas agregar varios dominios al mismo certificado, proporciona una lista de domains[] y las dnsAuthorizations[] coincidentes cuando realices la solicitud.

Si deseas crear un certificado mediante una autorización para test.example.com llamada test-example-com, sigue estos pasos:

gcloud

Usa el comando gcloud certificate-manager certificates:

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

Esto crea un certificado con cada autorización DNS en el estado AUTHORIZING y el certificado en el 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,
    ]
  }
}

La creación del certificado puede tomar unos minutos (y hasta una hora), según lo siguiente:

  • La rapidez con la que tu proveedor de DNS propaga los cambios de configuración.
  • Cantidad de dominios para los que intentas validar y crear certificados.

En el campo state, se muestra el estado actual del certificado:

  • APROVISIONAMIENTO: el certificado aún se está aprovisionando. Es probable que esto se deba a que la solicitud de creación de certificado se realizó hace poco.
  • FALLA: Se muestra después de varios intentos de validar el dominio o emitir el certificado. Para obtener más información, consulta los campos provisioning_issue, authorization_attempt_info y failure_reason.
  • ACTIVO: el dominio se validó correctamente y el certificado se aprovisionó.

Para verificar el estado del certificado, sigue estos pasos:

gcloud

Usa el comando gcloud certificate-manager certificates:

gcloud certificate-manager certificates describe CERTIFICATE_NAME

En este ejemplo, la autorización de DNS es AUTHORIZED y el estado del certificado es 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'

Cuando el certificado sea ACTIVE, puedes adjuntarlo a un servicio de almacenamiento en caché perimetral.

Adjunta un certificado a un servicio

Después de crear un certificado administrado, puedes asociarlo con uno o más de tus servicios de almacenamiento en caché perimetral. Los certificados se pueden adjuntar a los servicios existentes y nuevos si se actualiza la lista de edgeSslCertificates en el servicio.

Debes tener los siguientes permisos de IAM para adjuntar certificados a un servicio de almacenamiento en caché perimetral:

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

Para adjuntar un certificado a un servicio, completa los siguientes pasos.

gcloud

Ejecuta el comando gcloud edge-cache services export para exportar el archivo YAML de tu servicio:

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

Edita el archivo YAML exportado para agregar el certificado:

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

Ejecuta el comando gcloud edge-cache services import:

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

Resultado:

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

El comando muestra una descripción de tu servicio, incluida la lista de edgeSslCertificates adjunta:

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

Después de actualizar la configuración, el certificado se propaga a todas las ubicaciones perimetrales en minutos. Para probar que el certificado esté asociado con el servicio de caché de Edge antes de realizar cambios de DNS, puedes emitir una solicitud en la dirección IPv4 o IPv6 asociada con el servicio.

Reemplaza y quita certificados

Para agregar y quitar certificados, actualiza la lista de certificados.

Cuando se usa la marca --edge-ssl-certificate de la CLI de gcloud, los certificados solo se agregan a la lista de certificados existentes y no se reemplazan. Esto evita que quites por accidente un certificado activo válido.

Para quitar el certificado test-example-com de nuestro servicio en el siguiente ejemplo, puedes exportar tu servicio a YAML con los comandos de importación y exportación.

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

En los siguientes comandos, se muestra cómo exportar el servicio, quitar la referencia del certificado y, luego, importar el servicio actualizado.

gcloud

Usa el comando gcloud edge-cache services:

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

Quita los certificados que ya no quieras que use el servicio mediante tu editor de texto preferido:

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

Guarda el archivo modificado y, luego, importa el servicio actualizado:

gcloud

Usa el comando gcloud edge-cache services:

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

No hay un límite en cuanto a la cantidad de servicios con los que se puede asociar un certificado, y cada servicio de almacenamiento en caché perimetral puede hacer referencia hasta a cinco certificados.

Certificados autoadministrados

Puedes subir tus propios certificados a Media CDN si tienes casos prácticos específicos que lo requieran.

Para subir un certificado y su clave asociada al administrador de certificados, haz lo siguiente:

gcloud

Usa el comando gcloud certificate-manager certificates. Asegúrate de especificar --scope=EDGE_CACHE para los certificados asociados con Media CDN.

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

Una vez que se subió el certificado, puedes adjuntarlo a un EdgeCacheService como lo harías con un certificado administrado.

Solucionar problemas relacionados con la emisión de certificados

Consulta la guía de solución de problemas para obtener información sobre cómo resolver errores comunes de autorización y emisión de certificados.

¿Qué sigue?