创建媒体 CDN 服务后,您可以颁发和关联 SSL (TLS) 证书,以支持浏览器和移动应用中的安全连接。
颁发托管式证书
如需创建托管式证书并将其关联到媒体 CDN 服务,您必须执行以下操作:
- 创建质询令牌并添加 DNS 记录,以证明您对要为其颁发证书的网域的所有权(“授权”)。
- 根据该授权,使用一个或多个域名创建
EDGE_CACHE类型的证书。 - 将该证书关联到一个或多个边缘缓存服务。
您必须拥有以下 Identity and Access Management 权限,才能授权、创建证书并将其关联到边缘缓存服务:
certificatemanager.certs.createcertificatemanager.certs.getcertificatemanager.certs.listcertificatemanager.certs.usecertificatemanager.dnsauthorizations.createcertificatemanager.dnsauthorizations.getcertificatemanager.dnsauthorizations.listcertificatemanager.dnsauthorizations.use
需要将现有证书关联到媒体 CDN 服务的用户需要拥有 certificatemanager.certs.get、certificatemanager.certs.list 和 certificatemanager.certs.use IAM 权限。
准备工作
- 您必须拥有一个已注册的域名,并且可以更新该域名的公共 DNS 记录。
- 阅读 SSL 证书概览。
创建 DNS 授权
首先,您必须创建 DNS 授权来证明您对网域的所有权,然后才能为其颁发证书。DNS 授权使用 DNS-01 ACME 质询,让您可以在将面向用户的流量 定向到边缘缓存服务之前颁发证书。
将 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
如果您为自己的网域使用 Cloud DNS,请参阅 向托管网域添加新记录 的步骤。如果您使用其他 DNS 提供商,请参阅其文档以了解如何添加 CNAME 记录。
- 您可以针对需要为其颁发证书的每个网域重复此步骤。
- 证书可以包含多个网域,也可以根据需要选择为每个网域颁发一个证书。获得网域的授权后,您可以使用该授权来颁发证书。
- 我们建议您创建较少的证书,每个证书都包含用于您的服务的所有域名。这样可以提高使用多个域名时的客户端性能,因为客户端可以更频繁地从 TLS 恢复中受益。
- 每个边缘缓存服务最多可以引用五个证书。通过颁发较少的证书,您可以保持在此限制范围内。
如果您需要在日后检索 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
证书创建可能需要几分钟(最多一小时)才能完成,具体取决于以下因素:
- DNS 提供商传播配置更改的速度。
- 您尝试验证和创建证书的网域数量。
state 字段会显示证书的当前状态:
- PROVISIONING - 证书仍在预配中。这可能是因为证书创建请求是最近才发出的。
- FAILED - 在多次尝试验证网域
或颁发证书后返回。如需了解详情,请参阅
provisioning_issue、authorization_attempt_info和failure_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 状态后,您可以 将其关联到
边缘缓存服务。
将证书关联到服务
创建托管式证书后,您可以将其与一个或多个边缘缓存服务相关联。您可以通过更新服务中的 edgeSslCertificates 列表,将证书关联到现有服务和新服务。
您必须拥有以下 IAM 权限,才能将证书关联到边缘缓存服务:
certificatemanager.certs.getcertificatemanager.certs.listcertificatemanager.certs.usenetworkservices.edgeCacheServices.getnetworkservices.edgeCacheServices.listnetworkservices.edgeCacheServices.update
如需将证书关联到服务,请完成以下步骤。
gcloud
运行 gcloud edge-cache services export 命令以导出服务的 YAML 文件:
gcloud edge-cache services export SERVICE_NAME \
--destination=my-service.yaml
修改导出的 YAML 文件以添加证书:
name: SERVICE_NAME edgeSslCertificates: - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME
运行 gcloud edge-cache services import 命令:
gcloud edge-cache services import SERVICE_NAME \
--source=my-service.yaml
输出:
Request issued for: [SERVICE_NAME] Updated service [SERVICE_NAME]
该命令会返回服务的说明,包括现在关联的 edgeSslCertificates 列表:
name: SERVICE_NAME edgeSslCertificates: - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME
更新配置后,证书会在几分钟内传播到所有边缘位置。如需在进行 DNS 更改之前测试证书是否与边缘缓存服务相关联,您可以针对与服务关联的 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 SERVICE_NAME --destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/SERVICE_NAME] to 'my-service.yaml'.
使用您偏好的文本编辑器移除您不再希望服务使用的证书:
name: SERVICE_NAME edgeSslCertificates: - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME
保存修改后的文件,然后导入更新后的服务:
gcloud
使用 gcloud edge-cache services 命令:
gcloud edge-cache services import SERVICE_NAME --source=my-service.yaml
Request issued for: [SERVICE_NAME] Updated service [SERVICE_NAME].
证书可以关联的服务数量没有限制,并且每个边缘缓存服务最多可以引用五个证书。
自行管理的证书
如果您有需要自行管理证书的特定使用场景,可以将自己的证书上传到媒体 CDN。
如需将证书及其关联的密钥上传到 Certificate Manager,请执行以下操作:
gcloud
使用 gcloud certificate-manager certificates 命令。请确保为与媒体 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。
排查证书颁发问题
如需了解如何解决常见的证书授权和颁发错误,请参阅问题排查指南 。
后续步骤
- 将所有 HTTP 请求重定向到 HTTPS 以默认加密通信
- 查看请求日志 使用 Logging
- 配置签名请求 以保护您的内容
- 优化缓存键和 TTL 以提高缓存命中率
- 配置高级路由匹配 并添加其他来源