配置 SSL (TLS) 证书

创建 Media CDN 服务后,您可以颁发并附加 SSL (TLS) 证书,以支持浏览器和移动应用中的安全连接。

颁发托管式证书

如需创建受管理的证书并将其附加到媒体 CDN 服务,您必须执行以下操作:

  1. 通过创建质询令牌并添加 DNS 记录,证明您拥有要为其颁发证书的网域的所有权(“授权”)。
  2. 根据该授权创建一个或多个域名为 EDGE_CACHE 类型的证书。
  3. 将该证书附加到一项或多项 Edge Cache 服务。

您必须拥有以下 Identity and Access Management 权限,才能授权、创建证书并将证书附加到 Edge Cache 服务:

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

需要将现有证书附加到 Media CDN 服务中的用户需要 certificatemanager.certs.getcertificatemanager.certs.listcertificatemanager.certs.use IAM 权限。

准备工作

  • 您必须拥有一个已注册的域名,并且可以更新该域名的公共 DNS 记录。
  • 请阅读 SSL 证书概览

创建 DNS 授权

首先,您必须创建 DNS 授权来证明您对网域的所有权,然后才能为该网域颁发证书。DNS 授权使用 DNS-01 ACME 质询,可让您在将面向用户的流量导向 Edge Cache 服务之前签发证书。

domain 的值设置为您打算为其创建证书的域名,如下所示:

gcloud

使用 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

gcloud CLI 会返回一个响应,其中包含您需要添加的 DNS 记录的详细信息。

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

如果您为网域使用 Cloud DNS,请参阅向托管网域添加新记录的步骤。如果您使用的是其他 DNS 提供商,请参阅其文档,了解如何添加 CNAME 记录。

  • 您可以针对需要为其颁发证书的每个网域重复此步骤。
  • 证书可以包含多个网域,您也可以根据需要选择为每个网域颁发证书。获得网域的授权后,您可以使用该授权来颁发证书。
  • 我们建议您创建较少的证书,每个证书都包含用于服务的所有域名。这样一来,当使用多个网域时,客户端可以更频繁地受益于 TLS 恢复,从而提高客户端性能。
  • 每个边缘缓存服务最多可以引用 5 个证书。通过签发较少的证书,您可以保持在此限值范围内。

如果您日后需要检索 DNS 记录值,请针对创建 DNS 授权时提供的 authorizationName 发出请求:

创建证书

添加 DNS 记录以证明您拥有要为其创建证书的网域后,您可以发出证书创建请求。

dnsAuthorizations 的列表必须与您之前在此流程中创建的现有授权的名称一致。如果您想将多个网域添加到同一证书,请在发出请求时提供 domains[] 和匹配的 dnsAuthorizations[] 列表。

如需使用针对 test.example.com 的授权(名为 test-example-com)创建证书,请执行以下操作:

gcloud

使用 gcloud certificate-manager certificates 命令:

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

这会创建一个证书,其中每个 DNS 授权都处于 AUTHORIZING 状态,证书处于 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,
    ]
  }
}

证书创建可能需要几分钟(最多 1 小时)才能完成,具体取决于以下因素:

  • DNS 提供商传播配置更改的速度。
  • 您尝试验证并创建证书的网域数量。

state 字段显示证书的当前状态:

  • PROVISIONING - 证书仍在预配中。这可能是因为证书创建请求是最近才提出的。
  • 失败 - 在多次尝试验证网域或颁发证书后返回。如需了解详情,请参阅 provisioning_issueauthorization_attempt_infofailure_reason 字段。
  • ACTIVE - 网域已成功通过验证,并且证书已预配。

如需查看证书的状态,请执行以下操作:

gcloud

使用 gcloud certificate-manager certificates 命令:

gcloud certificate-manager certificates describe CERTIFICATE_NAME

在此示例中,DNS 授权为 AUTHORIZED,证书状态为 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'

证书ACTIVE后,您可以将其附加到 Edge 缓存服务

将证书附加到服务

创建受管理的证书后,您可以将其与一个或多个边缘缓存服务相关联。通过更新服务中的 edgeSslCertificates 列表,可以将证书附加到现有服务和新服务。

您必须拥有以下 IAM 权限,才能将证书附加到 Edge Cache 服务:

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

如需将证书附加到服务,请完成以下步骤。

gcloud

运行 gcloud edge-cache services export 命令以导出服务的 YAML 文件:

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

修改导出的 YAML 文件以添加您的证书:

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

运行 gcloud edge-cache services import 命令:

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

输出:

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

该命令会返回服务的说明,包括当前附加的 edgeSslCertificates 列表:

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

更新配置后,证书会在几分钟内传播到所有边缘位置。为了在进行 DNS 更改之前测试证书是否与您的 Edge Cache 服务相关联,您可以针对与您的服务相关联的 IPv4 或 IPv6 地址发出请求。

替换和移除证书

您可以通过更新证书列表来添加和移除证书。

使用 gcloud CLI 的 --edge-ssl-certificate 标志时,证书只会附加到现有证书列表中,而不会替换现有证书。这样可以防止您意外移除有效且处于有效状态的证书。

如需从我们的服务中移除 test-example-com 证书(如以下示例所示),您可以使用导入和导出命令将服务导出为 YAML

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

以下命令展示了如何导出服务、移除证书引用,以及导入更新后的服务。

gcloud

使用 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'.

使用您偏好的文本编辑器移除您不再希望服务使用的证书:

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

保存修改后的文件,然后导入更新后的服务:

gcloud

使用 gcloud edge-cache services 命令:

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

一个证书可以关联的服务数量没有限制,并且每个边缘缓存服务最多可以引用五个证书。

自行管理的证书

如果您有需要使用自有证书的特定使用情形,可以将自有证书上传到 Media CDN。

如需将证书及其关联的密钥上传到 Certificate Manager,请执行以下操作:

gcloud

使用 gcloud certificate-manager certificates 命令。请务必为与 Media CDN 关联的证书指定 --scope=EDGE_CACHE

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

上传证书后,您可以像附加受管理的证书一样,将其附加到 EdgeCacheService

排查证书颁发问题

如需了解如何解决常见的证书授权和签发错误,请参阅问题排查指南

后续步骤