从 openssl 命令解析到期日期

从 openssl 命令解析到期日期

本来想问如何自动检查 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 主机支持。

相关内容