OpenSSL 返回的 SSL 证书与 Chrome 显示的证书不同

OpenSSL 返回的 SSL 证书与 Chrome 显示的证书不同

使用以下命令通过 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 转发本身也存在严峻挑战(超出了本文档的范围),这些挑战远远超过了增加的转发困难。

取自:http://wiki.squid-cache.org/Features/BumpSslServerFirst

答案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 无需额外费用。

相关内容