我正在使用ssl-cert-check来跟踪我的域名证书列表。
在我的crontab中,我将它设置为静默运行,并通过电子邮件将域名过期,但是我用来debugging的命令是:
ssl-cert-check -f ssldomains.txt -x 21 -i
它正确读取文件并检索整个列表的证书,但它似乎没有得到由LetsEncrypt.org颁发的证书的正确失效date
其他证书提供者似乎不受此问题的影响。
例如,2017年3月24日我浏览器中检查的证书将于2017年1月15日到期。
我正在用nginx服务。
为什么CLI工具会检索错误的失效date,我该如何纠正?
这似乎是一个SNI问题。 如果您在同一IP上提供多个SSL证书,则客户端会将主机名称与初始请求一起发送,以便服务器可以提供正确的证书。 老版本的ssl-cert-check不这样做,该function是在3.27版本中引入的。
Ubuntu版本14.04和16.04发布了3.27版本,但是这个版本的function似乎很糟糕。 基本上有两行代码是相关的:
TLSSERVERNAME="FALSE"
和:
if [ "${TLSSERVERNAME}" = "TRUE" ] then TLSFLAG="${TLSFLAG} -servername $1" fi
正如你所看到的,variables设置为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安装的脚本中时,结果很好,没有块,我得到了错误的证书,就像你一样。
所以,这是一个bug,已经被作者修复了,但还没有find它的方式进入Ubuntu的存储库。 你可以自己修复它,并希望在下次更新后,回购包含一个固定的版本,或者你使用github脚本。