【问题标题】:Using '-servername' param with openssl s_client将“-servername”参数与 openssl s_client 一起使用
【发布时间】:2017-10-02 19:11:33
【问题描述】:

我正在 Centos6/Apache 上安装新的 SSL 证书,而我的 Web 浏览器不断获取旧证书。为了测试我的设置,我使用了“openssl s_client”,但我看到了基于“-servername”参数的不同结果。在我们看来,没有人认为这个参数也没有出现在手册页中,但我看到这里提到了 OpenSSL: Check SSL Certificate Expiration Date and More

如果我运行这个命令:

echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

我得到了正确的证书日期。

(notBefore=2017 年 4 月 20 日 00:00:00 GMT notAfter=2018 年 4 月 20 日 23:59:59 GMT)

但是,如果我将 -servername 参数插入命令中

echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

然后我会得到我的浏览器显示的过期日期 -

(notBefore=2016 年 4 月 20 日 00:00:00 GMT notAfter=2017 年 4 月 20 日 23:59:59 GMT)

谁能解释为什么会发生这种情况,因为这一定与我的 SSL 证书在我的浏览器中显示为过期的原因有关。

谢谢 哦

【问题讨论】:

标签: apache ssl openssl centos6


【解决方案1】:

s_client 的 servername 参数记录在此页面上(简要地):

https://www.openssl.org/docs/man1.0.2/apps/s_client.html

本质上,它的工作方式有点像 HTTP 中的“主机”标头,即它导致请求的域名作为 SSL/TLS 握手的一部分(在 SNI - 服务器名称指示扩展中)传递。然后,服务器可以在单个 IP 后面托管多个域。它将根据请求的域名使用适当的证书进行响应。

如果您不请求特定域名,服务器不知道该给您哪个证书,因此您最终会得到一个默认证书。在您的情况下,服务器为您的域提供的证书之一已过期,但默认证书尚未过期。

您需要确保为您的域更新正确的 VirtualHost 条目,例如见:

https://www.digicert.com/ssl-support/apache-multiple-ssl-certificates-using-sni.htm

【讨论】:

  • 谢谢马特——这正是我需要的答案。我查看了您发送给我的手册页链接,如果没有您的解释,我仍然会摸不着头脑。再次感谢!
  • 太棒了!很高兴你把事情解决了。请您将我的答案标记为正确吗?
猜你喜欢
  • 1970-01-01
  • 2014-12-05
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
相关资源
最近更新 更多