在 openssl s_client 中使用“-servername”参数

use*_*017 6 apache ssl openssl centos6

我正在 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=Apr 20 00:00:00 2017 GMT notAfter=Apr 20 23:59:59 2018 GMT)

但是,如果我在命令中引入 -servername 参数

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

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

(notBefore=Apr 20 00:00:00 2016 GMT notAfter=Apr 20 23:59:59 2017 GMT)

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

谢谢哦

Mat*_*ell 16

此页面上(简要)记录了 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