我正在使用 ssl-cert-check 来跟踪我的域证书列表。
在我的 crontab 中,我将其设置为静默运行并通过电子邮件向我发送即将过期的域名,但我用来调试的命令是:
ssl-cert-check -f ssldomains.txt -x 21 -i
它正确地读取了文件并检索了整个列表的证书,但似乎没有获取 LetsEncrypt.org 颁发的证书的正确到期日期
其他证书提供商似乎不受此问题的影响。
例如,当我在浏览器中检查某个证书时,它显示该证书将于 2017 年 3 月 24 日到期,但实际到期日期为 2017 年 1 月 15 日。
我正在使用 nginx 服务。
为什么 CLI 工具会检索错误的到期日期?我该如何纠正这个问题?
答案1
这似乎是一个信噪比问题。如果您在同一 IP 上提供多个 SSL 证书,客户端会将主机名与初始请求一起发送,以便服务器可以提供正确的证书。旧版本的 ssl-cert-check 不会这样做,该功能是在 3.27 版中引入的。
Ubuntu 14.04 和 16.04 版本都发布了 3.27 版本,但似乎该功能在此版本中存在错误。主要有两行代码相关:
TLSSERVERNAME="FALSE"
和:
if [ "${TLSSERVERNAME}" = "TRUE" ]
then
TLSFLAG="${TLSFLAG} -servername $1"
fi
如您所见,变量被设置为 FALSE,后来又检查其是否为 TRUE,但它从未改变。
当前版本GitHub(3.30)有一个附加代码块:
if ${OPENSSL} s_client -h 2>&1 | grep '-servername' > /dev/null
then
TLSSERVERNAME="TRUE"
else
TLSSERVERNAME="FALSE"
fi
这将检查已安装的 openssl 版本是否支持服务器名。当我将此块添加到本地 Ubuntu 安装上的脚本中时,结果很好,如果没有此块,我会得到错误的证书,就像你一样。
所以,这是一个错误,作者已经修复了它,但还没有找到进入 Ubuntu 存储库的方法。您可以自己修复它,并希望在下次更新后存储库包含修复版本,或者您可以使用 github 中的脚本。