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

问题描述 投票:0回答:1

我正在 Centos6/Apache 上安装新的 SSL 证书,但我的 Web 浏览器不断获取旧证书。为了测试我的设置,我使用“openssl s_client”,但我看到基于“-servername”参数的不同结果。似乎没有人使用这个参数,它也没有出现在手册页中,但我看到这里提到了它OpenSSL:检查 SSL 证书到期日期和更多

如果我运行此命令:

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个回答
28
投票

s_client 的服务器名称参数在此页面上(简要)记录:

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.