Media CDN 在对请求进行签名时会使用加密密钥对。媒体 CDN 使用密钥集来存储当前用于对请求进行签名的密钥对。对于每个密钥集,最多可以指定 3 个公钥和 3 个验证共享密钥,共计 6 个密钥。
您还可以从按键集中移除未使用的按键。添加和移除密钥通常称为密钥轮替。借助密文轮替,您可以执行以下操作:
- 通过将新密钥附加到密钥集,安全地将新密钥添加到密钥集。
- 使用相应的 Secret 生成令牌。
在最早的令牌过期后移除旧 Secret。
例如,假设您将短时效令牌设置为在一小时后过期。然后,在新的请求为用户提供服务一到几个小时后,您可以移除用于短时效令牌的最早密钥。
在移除未使用的密钥之前,请验证该密钥是否未被引用或提取,以在应用服务器上对用户请求进行签名。从密钥集中过早移除密钥会导致媒体 CDN 无法验证与该密钥关联的请求。系统会向受影响的用户提供 HTTP 403
Forbidden
响应。
为了优化对 Secret Manager 的并发访问的性能、可靠性和费用,共享验证密钥密文最多会缓存一小时。密文缓存可能会导致在从 Secret Manager 中删除密文后,令牌访问权限最多持续一小时。
最佳实践是定期轮替密钥。
已知限制
媒体 CDN 会使用 HTTP 403
响应来拒绝使用 Cloud CDN 使用的对称签名进行签名的请求。Media CDN 目前支持使用令牌格式和 Media CDN 引用的密钥的请求中的对称密钥。
非对称密钥必须生成为 Ed25519 对,其中包含 512 位(64 字节)私钥和 256 位(32 字节)公钥。Tink 库支持使用 C++、Go、Java 和 Objective-C 生成密钥、签名和验证 Ed25519 签名。
非对称密钥必须具有以下特征:
采用 base64 编码,长度为 44 个字节(填充)或 43 个字节(未填充)。我们接受带填充和不带填充的 base64 格式。
公钥必须采用可在网址中安全使用的 base64 格式进行编码。私钥可以采用标准 base64 格式进行编码。
拥有匹配的私钥。