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

Geo*_*rey 13 google-chrome openssl

使用 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

Den*_*ker 23

CloudFront 使用 SNI,这是一种能够在单个 IP 上使用多个证书的方法。所有现代浏览器都支持这一点,openssl 的 s_client 命令也是如此,但 s_client 并没有神奇地做到这一点。你必须告诉它使用它:

openssl s_client -servername dlnmh9ip6v2uc.cloudfront.net  -connect dlnmh9ip6v2uc.cloudfront.net:443 -showcerts
Run Code Online (Sandbox Code Playgroud)

  • Yaaay Dennis,这是我今天为 SF 排序的“*哦,我不知道*”,现在还不到上午 9 点!来自我的 +1。 (2认同)

Dav*_*rtz 9

Chrome 支持SNI,告诉服务器要发送哪个证书。该s_client命令没有。

有SNI的CloudFront的的使用的更多细节在这里

当您使用 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 版本。