检查 SSL 证书是否有效的脚本

Mar*_*ter 18 bash cron ssl openssl certificates

我有多个 SSL 证书,我希望在证书过期时收到通知。

我的想法是创建一个cronjob,它每天执行一个简单的命令。

我知道opensslLinux中的命令可以用来显示远程服务器的证书信息,即:

openssl s_client -connect www.google.com:443
Run Code Online (Sandbox Code Playgroud)

但是我在此输出中没有看到到期日期。另外,我必须用CTRL+终止这个命令c

如何从脚本(最好使用openssl)检查远程证书的过期时间,并以“批处理模式”执行,以便它在没有用户交互的情况下自动运行?

cha*_*aos 22

您的命令现在需要一个 http 请求GET index.php,例如。改用这个:

if true | openssl s_client -connect www.google.com:443 2>/dev/null | \
  openssl x509 -noout -checkend 0; then
  echo "Certificate is not expired"
else
  echo "Certificate is expired"
fi
Run Code Online (Sandbox Code Playgroud)
  • true: 将不提供任何输入,后跟 eof,以便 openssl 在连接后退出。
    • openssl ...:来自您问题的命令
    • 2>/dev/null: 错误输出将被忽略。
  • openssl x509:激活 X.509 证书数据管理。
    • 这将默认从标准输入读取
    • -noout: 抑制整个证书输出
    • -checkend 0: 检查证书是否在接下来的 0 秒内过期


Wou*_*lst 9

它确实会为您提供证书,但不会对其进行解码。因为如果你想要日期,那将是必需的,所以你看不到它。因此,您需要将它通过管道x509传输到 OpenSSL 的应用程序中以解码证书:

openssl s_client -connect www.example.com:443 \
    -servername www.example.com </dev/null |\
    openssl x509 -in /dev/stdin -noout -text
Run Code Online (Sandbox Code Playgroud)

这将为您提供标准输出上的完整解码证书,包括其有效日期。


小智 6

如果您需要检查到期日期,多亏了这篇博客文章,找到了一种方法,只需一次调用即可找到此信息和其他相关信息:

echo | openssl s_client -servername unix.stackexchange.com -connect unix.stackexchange.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates
Run Code Online (Sandbox Code Playgroud)

输出包括颁发者、主题(颁发证书的对象)、颁发日期和最终到期日期

issuer= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
subject= /C=US/ST=NY/L=New York/O=Stack Exchange, Inc./CN=*.stackexchange.com
notBefore=May 21 00:00:00 2016 GMT
notAfter=Aug 14 12:00:00 2019 GMT
Run Code Online (Sandbox Code Playgroud)