使用以下命令通过 OpenSSL 查询 Sparkfun 的 CDN URL:
openssl s_client -showcerts -connect dlnmh9ip6v2uc.cloudfront.net:443
证书中返回的通用名称是*.sparkfun.com
,验证失败,但如果在 Chrome 中加载主机,则显示的通用名称是*.cloudfront.net
这里发生了什么?
这会导致问题,因为我所在的环境通过 Squid SSL_Bump 代理 SSL,这会为该域生成由我本地受信任的 CA 签名的证书。这适用于除上述域之外的所有域,因为 CN 不匹配,因为新证书是使用 OpenSSL 生成的。
编辑- 我已经验证了在远程数据中心的服务器上使用 OpenSSL 也会发生同样的情况,该服务器直接连接到互联网,不需要代理或过滤。
编辑- 问题是由于 SNI 造成的,如已接受,但要填写为什么它会导致 Squid 和 SSL_Bump 出现问题的信息:
该项目不支持将 SSL 服务器名称指示 (SNI) 信息转发到源服务器,并且会使此类支持稍微困难一些。但是,SNI 转发本身也存在严峻挑战(超出了本文档的范围),这些挑战远远超过了增加的转发困难。
答案1
CloudFront 使用 SNI,这是一种能够在单个 IP 上使用多个证书的方法。所有现代浏览器都支持此功能,openssl 的 s_client 命令也支持此功能,但 s_client 并不能神奇地做到这一点。您必须告诉它使用它:
openssl s_client -servername dlnmh9ip6v2uc.cloudfront.net -connect dlnmh9ip6v2uc.cloudfront.net:443 -showcerts
答案2
Chrome 支持信噪比,告诉服务器要发送哪个证书。该s_client
命令没有。
有关 CloudFront 使用 SNI 的更多详细信息这里。
当您使用 SNI 自定义 SSL 时,某些用户可能无法访问您的内容,因为某些较旧的浏览器不支持 SNI,并且无法与 CloudFront 建立连接以加载内容的 HTTPS 版本。有关 SNI 的更多信息(包括受支持的浏览器列表),请访问我们的常问问题页。
和:
SNI 自定义 SSL 依赖于传输层安全协议的 SNI 扩展,该扩展允许多个域通过包含查看器尝试连接的主机名来通过同一 IP 地址提供 SSL 流量。与专用 IP 自定义 SSL 一样,CloudFront 从每个 Amazon CloudFront 边缘位置提供内容,并且具有与专用 IP 自定义 SSL 功能相同的安全性。SNI 自定义 SSL 适用于大多数现代浏览器,包括 Chrome 版本 6 及更高版本(在 Windows XP 及更高版本或 OS X 10.5.7 及更高版本上运行)、Safari 版本 3 及更高版本(在 Windows Vista 及更高版本或 Mac OS X 10.5.6 及更高版本上运行)、Firefox 2.0 及更高版本以及 Internet Explorer 7 及更高版本(在 Windows Vista 及更高版本上运行)。不支持 SNI 的旧浏览器无法与 CloudFront 建立连接以加载内容的 HTTPS 版本。除了标准的 CloudFront 数据传输和请求费用外,SNI 自定义 SSL 无需额外费用。