为什么 https://gmail.com/ 使用错误证书时不会产生 SSL 错误?

为什么 https://gmail.com/ 使用错误证书时不会产生 SSL 错误?

看起来像https://gmail.com使用针对主机名 的 SSL 证书mail.google.com。由于 SSL 证书主机名与浏览器 URL 不匹配,为什么这样做有效?我应该收到警告!

我使用 Firefox 和 Chromium 进行了测试(看起来之前没用过)。

我使用以下命令检查了证书:echo | openssl s_client -connect gmail.com:443结果显示:

Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=mail.google.com

答案1

gmail.com 使用了良好的证书,但您连接的服务器正在使用服务器名称指示在单个地址+端口上运行虚拟主机。要实现此功能,客户端必须在 SSL/TLS 协商完成之前告知服务器它正在寻找哪个虚拟主机。Firefox 和 Chromium(以及其他类似大小的客户端)会自动执行此操作。

要获取有效的证书openssl s_client,您需要使用-servername选项。

openssl s_client -servername gmail.com -connect gmail.com:443

Google 搜索结果山猫 SNI看起来不太好。

答案2

https://gmail.com/没有使用坏证书。以下是 Fiddler2 截获的当前证书:

== Server Certificate ==========
[Subject]
  CN=gmail.com, O=Google Inc, L=Mountain View, S=California, C=US

[Issuer]
  CN=Google Internet Authority G2, O=Google Inc, C=US

[Serial Number]
  4F4A246099981C2C

[Not Before]
  16/07/2014 10:04:37 PM

[Not After]
  14/10/2014 11:00:00 AM

[Thumbprint]
  8F1065D237732F71CAD350A3FD0089AEEAAB675E

请注意CN=gmail.com

HTTP 请求的实际响应类型是301 Moved Permanentlyto https://mail.google.com/。这有两个效果:

  1. 浏览器将重定向到目的地,发出新的请求,使用新的隧道(因为域不同)和不同的证书。这就是您看到证书的原因mail.google.com- 这是重定向。如果您查看地址栏,您实际所在的站点是http://mail.google.com/,而不是http://gmail.com/。在浏览器中捕获预重定向证书有点困难,这就是我使用 Fiddler2 的原因。

  2. 浏览器将缓存此重定向并在将来自动执行,永远不会再发出另一个请求https://gmail.com/(这就是 的意义所在Moved Permanently)。这对于这个问题来说并不重要,但它确实使发现重定向变得更加困难 - 您需要先清除缓存或打开隐私浏览窗口。

相关内容