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

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

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

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

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

openssl s_client -connect www.google.com:443

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

如何从脚本(最好使用openssl)检查远程证书的到期时间并以“批处理模式”执行,以便它自动运行而无需用户交互?

答案1

您的命令现在需要一个 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

  • true: 不会给出任何输入,后跟 eof,以便 openssl 在连接后退出。
    • openssl ...:你的问题中的命令
    • 2>/dev/null:错误输出将被忽略。
  • openssl x509:激活 X.509 证书数据管理。
    • 默认情况下将从标准输入读取
    • -noout:禁止整个证书输出
    • -checkend 0:检查证书是否在接下来的0秒内过期

答案2

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

openssl s_client -connect www.example.com:443 \
    -servername www.example.com </dev/null |\
    openssl x509 -in /dev/stdin -noout -text

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

答案3

如果您需要检查到期日期,谢谢这个博客文章,找到了一种通过一次调用即可找到此信息以及其他相关信息的方法:

echo | openssl s_client -servername unix.stackexchange.com -connect unix.stackexchange.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

输出包括颁发者、主题(证书颁发给谁)、颁发日期和最后到期日期:

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

相关内容