如果我在Mac或Linux中有实际的文件和Bash shell,我如何查询证书文件何时到期?不是网站,实际上是证书文件本身,假设我有csr、key、pem和chain文件。


当前回答

我已经做了一个与此相关的bash脚本来检查证书是否过期。如果需要,您可以使用相同的方法。

脚本

https://github.com/zeeshanjamal16/usefulScripts/blob/master/sslCertificateExpireCheck.sh

自述

https://github.com/zeeshanjamal16/usefulScripts/blob/master/README.md

其他回答

如果你只想知道证书是否已经过期(或者将在接下来的N秒内过期),openssl x509的-checkend <seconds>选项将告诉你:

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

这样你就不必自己进行日期/时间比较了。

在上面的例子中,如果证书没有过期,Openssl将返回0(零)的退出码,并且在接下来的86400秒内不会这样做。如果证书已经过期或已经过期——或者出现其他错误,如文件无效/不存在——则返回代码为1。

(当然,它假设时间/日期设置正确)

请注意,旧版本的openssl有一个错误,这意味着如果在checkend中指定的时间太大,将总是返回0 (https://github.com/openssl/openssl/issues/6180)。

我已经做了一个与此相关的bash脚本来检查证书是否过期。如果需要,您可以使用相同的方法。

脚本

https://github.com/zeeshanjamal16/usefulScripts/blob/master/sslCertificateExpireCheck.sh

自述

https://github.com/zeeshanjamal16/usefulScripts/blob/master/README.md

一行检查true/false,如果域名证书将在一段时间后过期(例如。15天):

openssl x509 -checkend $(( 24*3600*15 )) -noout -in <(openssl s_client -showcerts -connect my.domain.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM)
if [ $? -eq 0 ]; then
  echo 'good'
else
  echo 'bad'
fi

如果(出于某种原因)您想在Linux中使用GUI应用程序,请使用gcr-viewer(在大多数发行版中,它是由包gcr安装的(否则在包gcr-viewer中))

gcr-viewer file.pem
# or
gcr-viewer file.crt

openssl:

openssl x509 -enddate -noout -in file.pem

输出在表单上:

notAfter=Nov  3 22:23:50 2014 GMT

还可以参阅MikeW的回答,了解如何轻松地检查证书是否过期,或者是否会在某个时间段内过期,而不必解析上面的日期。