我试图了解当涉及 CDN 时,TLS 如何在客户端和源之间终止。
我认为当客户端直接连接到源时,这非常简单,可以为与源服务器关联的任意数量的证书/SAN 成员建立握手。
但如果我需要 CDN 怎么办?如果不上传相同的源证书并将其配置为从 CDN 呈现,是否无法在我的源之前使用第 3 方 CDN?
我知道不同的 CDN 处理事情的方式不同。例如,Google CDN 似乎能够通过应用于上游 GCP LB 的证书来正确终止 TLS。这是不是只有 GCDN 才能做到的特殊事情,因为它们与 GCP 紧密集成?
理想情况下,我希望能够在自己的来源托管自己的证书,并且只需将 CDN 通过 TCP 直接发送到来源,以便客户端和来源服务器可以通过零额外配置进行端到端认证和加密在 CDN 上,而 CDN 仍然负责缓存部分。但听起来这似乎是不可能的?
client => cdn => origin(cert)
CDN 只不过是一个增强版的负载均衡器。当客户端发出请求时,会建立两个不同的 TLS 会话:
这意味着:
也就是说,客户端和源端之间没有真正的端到端加密,CDN 是一个 TLS 终止点。无论 CDN 背后发生什么,对于客户端来说都是一个黑匣子。并且您无法在客户端检测或避免这种情况。CDN 必须能够访问 TLS 加密的数据,以确定如何处理请求,例如在本地缓存中搜索、路由到最近的源等。