我正在使用 ssl-cert-check 来跟踪我的域证书列表。
在我的 crontab 中,我将其设置为安静运行并向我发送过期域的电子邮件,但我用来调试的命令是:
ssl-cert-check -f ssldomains.txt -x 21 -i
它正在正确读取文件并检索整个列表的证书,但它似乎没有获得 LetsEncrypt.org 颁发的证书的正确到期日期
其他证书提供者似乎不受此问题的影响。
例如,当我在浏览器中检查时,证书将于 2017 年 3 月 24 日到期,据报告该证书将于 2017 年 1 月 15 日到期。
我正在使用 nginx 服务。
为什么 CLI 工具会检索错误的到期日期,我该如何更正?
这似乎是一个SNI问题。如果您在同一个 IP 上提供多个 SSL 证书,客户端将主机名与初始请求一起发送,以便服务器可以提供正确的证书。旧版本的 ssl-cert-check 不这样做,该功能是在 3.27 版中引入的。
Ubuntu 14.04 和 16.04 版本都发布了 3.27 版本,但似乎该功能在此版本中存在错误。基本上有两行相关的代码:
和:
如您所见,该变量设置为 FALSE,然后检查为 TRUE,但从未更改。
GitHub 上的当前版本(3.30) 有一个额外的代码块:
这会检查已安装的 openssl 版本是否支持 servername。当我将此块添加到本地 Ubuntu 安装的脚本中时,结果很好,没有该块我得到错误的证书,就像你一样。
所以,这是一个错误,作者已经修复了它,但还没有找到它进入 Ubuntu 存储库的方式。您可以自己修复它,并希望在下次更新后 repo 包含一个固定版本,或者您使用来自 github 的脚本。