本来想问如何自动检查 SSL 证书的日期,但后来想通了,所以下面你也可以找到我的答案。
答案1
这是我想出的解决方案:
将其作为脚本并每天通过 cron 调用它,然后一旦其中一个证书即将过期,您就会收到一封电子邮件:
#!/bin/bash
gracedays=14
for server in myserver1 myserver2 myserver3;
do
data=`echo | openssl s_client -connect "${server}:443" -servername "${server}" 2>/dev/null | openssl x509 -noout -enddate | sed -e 's#notAfter=##'`
ssldate=`date -d "${data}" '+%s'`
nowdate=`date '+%s'`
diff="$((${ssldate}-${nowdate}))"
if test "${diff}" -lt "$((${gracedays}*24*3600))";
then
if test "${diff}" -lt "0";
then
echo "The certificate for ${server} has already expired."
else
echo "The certificate for ${server} will expire in $((${diff}/3600/24)) days."
fi
fi
done
问题对我来说已经解决了,如果有人想让它变得更酷或放入某个存储库,请将其作为一个模块:随意!
答案2
Openssl 至少从 1.0.2 开始就内置了此功能。openssl x509 -checkend 86400
将检查证书在第二天的几秒钟内是否到期,并返回 ERRORCODE 以通过 bash 脚本进行直接测试。
答案3
data=`echo | openssl s_client -connect "${server}:443" -servername "${server}" 2>/dev/null | openssl x509 -noout -dates | grep notAfter | sed -e 's#notAfter=##'`
具有 SNI 主机支持。