Webserver -> CDN -> Users
从用户的角度来看,他们通过 HTTPS 访问网站。
问题: 这是如何工作的?
- 从 Web 服务器到用户的连接是否端到端加密?
- 还是第 3 方 CDN 开始加密?那么CDN可以嗅探流量吗?
Webserver -> CDN -> Users
从用户的角度来看,他们通过 HTTPS 访问网站。
问题: 这是如何工作的?
内容交付网络必须能够访问内容,因此它可以通过缓存、压缩等优化交付。通过浏览器和 Web 服务器之间真正的端到端加密,中间的 CDN 不可能访问内容。因此,CDN 本身必须是加密的端点,即只有浏览器和 CDN 之间的连接是安全的,并且 CDN 可以访问来自客户端和服务器的未加密数据。如果 CDN 和服务器之间的连接然后再次加密或未加密取决于设置,您将在实践中发现这两种情况。
请注意,负载均衡器与 CDN 不同,因为它不需要访问内容。因此它可以简单地通过 TLS 连接到服务器,从而获得端到端的安全性。但在实践中,负载均衡器通常与 SSL 卸载相结合,这样您就不再拥有端到端的安全性。但是由于负载均衡器(与 CDN 不同)通常与服务器位于同一个本地网络中,所以这不是什么大问题。
CDN 需要解密内容并缓存未加密的内容(压缩是另一回事)。如果您将 CDN 用于静态内容,则只会从 CDN 传送 CSS、PNG 等文件,而不会传送登录凭据等动态数据。大多数 CDN(如KeyCDN)允许您选择是否也应加密源服务器和 CDN 之间的连接。然后设置将如下所示:
Origin Server --HTTP(S)--> CDN(cached unencrypted) --HTTP(S)--> User
图是错误的。Web 服务器提供一个页面,Web 客户端获取页面上所有可用的资源。cdn 可以/也许有 https 作为它的传输。通常您不会使用页面的服务器端渲染,这意味着网络服务器本身使用 cdn。不,cdn 不能嗅探传统意义上的流量,但如果它愿意,它可以做任何 javascript 和 dom 操作允许它做的事情。但这样做会冒着激怒开发人员和 CDN 声誉的风险。
该图应为:
user <- webserver 1.1 user <- webserver(内容的服务器端渲染)<- CDN
用户 <- CDN ^ |---- 网络服务器
客户端上的 javascript 引擎会执行任何加载的 javascript。
详细地说,不幸的是 ascii 艺术不是那么清楚,用户 GET/POST 请求首先从 webserver 检索一个页面,该页面告诉浏览器要获取哪些其他资源。一些 URI 位于 CDN 上,另一些位于其他位置。传统上,javascript 库由 cdns 托管。但是网页也可以在提供服务之前在服务器上渲染和加载,因此这可能是妥协的载体。
正如 Steffen Ulrich 指出的那样,通过真正的端到端加密,CDN 不可能掌握内容。这就是为什么 CDN 通常存储未加密的内容,然后由客户端决定是通过 HTTP 还是 HTTPS 将内容提供给用户。如果客户选择 HTTPS,则 CDN 将成为加密的端点之一。
另外,请记住,CDN 主要用于提供公开可用的内容,这些内容会被缓存,然后从 CDN 的服务器重新分发 - 例如图像、视频、CSS 或 Javascript 文件。这些(一般来说)是任何人都可以使用的资产,而且它们应该可供所有人使用——在这种情况下,正如 OP 所要求的那样,“窃听”或“嗅探流量”是没有意义的。