if openssl x509 -checkend 86400 -noout -in file.pem
then
echo "Certificate is good for another day!"
else
echo "Certificate has expired or will do so within 24 hours!"
echo "(or is invalid/not found)"
fi
这是一个bash函数,它会检查您的所有服务器,假设您正在使用DNS循环法 . 请注意,这需要GNU日期,并且不适用于Mac OS
function check_certs () {
if [ -z "$1" ]
then
echo "domain name missing"
exit 1
fi
name="$1"
shift
now_epoch=$( date +%s )
dig +noall +answer $name | while read _ _ _ _ ip;
do
echo -n "$ip:"
expiry_date=$( echo | openssl s_client -showcerts -servername $name -connect $ip:443 2>/dev/null | openssl x509 -inform pem -noout -enddate | cut -d "=" -f 2 )
echo -n " $expiry_date";
expiry_epoch=$( date -d "$expiry_date" +%s )
expiry_days="$(( ($expiry_epoch - $now_epoch) / (3600 * 24) ))"
echo " $expiry_days days"
done
}
输出示例:
$ check_certs stackoverflow.com
151.101.1.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.65.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.129.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.193.69: Aug 14 12:00:00 2019 GMT 603 days
7 回答
如果您只想知道证书是否已过期(或将在接下来的N秒内完成),
openssl x509
的-checkend <seconds>
选项将告诉您:这节省了必须自己进行日期/时间比较 .
如果证书尚未过期,
openssl
将返回退出代码0
(零),并且在上面的示例中将不会在接下来的86400秒内返回 . 如果证书已经过期或已经过期 - 或者其他错误,如无效/不存在的文件 - 返回代码是1
.(当然,它假定时间/日期设置正确)
使用
openssl
:输出在表单上:
另请参阅MikeW's answer,了解如何轻松检查证书是否已过期,或者是否在一定时间内,无需解析上述日期 .
这是我的bash命令行,用于列出多个证书的到期顺序,最近一次到期 .
样本输出:
这是一个bash函数,它会检查您的所有服务器,假设您正在使用DNS循环法 . 请注意,这需要GNU日期,并且不适用于Mac OS
输出示例:
对于MAC OSX(El Capitan)这个修改Nicholas的例子对我有用 .
样本输出:
macOS不喜欢我系统上的
--date=
或--iso-8601
标志 .如果(由于某种原因)您想在Linux中使用GUI应用程序,请使用
gcr-viewer
(在大多数发行版中,它由包gcr
安装(否则在包gcr-viewer
中))如果证书在一段时间后过期(例如15天),则检查真/假的一行: