一、查看證書有效期的基本命令
$ openssl x509 -enddate -noout -in certificate.pem
通過上述命令可以查看PEM格式證書的到期時間,輸出結果通常為以下格式:
notAfter=Jun 8 04:51:16 2022 GMT
其中notAfter表示證書到期的時間,可以通過這個時間來判斷證書是否過期。
二、自動化檢查證書過期的腳本
通過編寫一個自動化的腳本來定期檢查證書是否過期,下面是一個簡單的Python腳本:
#!/usr/bin/env python
import subprocess
import datetime
domain = "example.com"
today = datetime.datetime.today()
p1 = subprocess.Popen(["openssl", "x509", "-noout", "-enddate", "-in", "/etc/ssl/certs/%s.crt" % domain], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", "notAfter"], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
output = p2.communicate()[0].strip()[9:]
expire_date = datetime.datetime.strptime(output, '%b %d %H:%M:%S %Y %Z')
delta = expire_date - today
if delta.days > 14:
print "Certificate for %s expires in %d days" % (domain, delta.days)
else:
print "Certificate for %s has expired or will do so within the next two weeks!" % domain
該腳本會讀取指定域名的CRT證書文件,檢查證書到期時間,并計算以當前日期為基準的天數差異,如果證書還有兩周以上的有效期,就會輸出剩余有效期天數,否則提示證書即將或已經過期。
三、結合Nagios進行證書監控
可以使用Nagios監控系統來監控證書的有效期,下面是Nagios監控腳本的示例:
#!/bin/bash
DAYSTOWARN=10
CRITDAYSTOWARN=2
days=$(echo "( $(/usr/bin/openssl x509 -in "$1" -enddate -noout | cut -d= -f 2) - $(date +%s) ) / 86400" | bc)
# Check validity values
if [[ $days -lt 0 ]]; then
echo "ERROR: certificate has already expired!"
exit 2
elif [[ $days -lt $CRITDAYSTOWARN ]]; then
echo "CRITICAL: certificate expires in ${days} days or less!"
exit 2
elif [[ $days -lt $DAYSTOWARN ]]; then
echo "WARNING: certificate expires in ${days} days!"
exit 1
fi
echo "OK: certificate expires in ${days} days."
exit 0
該腳本通過調用OpenSSL命令獲取證書有效期并計算剩余有效期天數,如果證書剩余有效期少于警告閾值,就會輸出警告信息,如果證書剩余有效期極低,就會輸出嚴重警告信息。
四、總結
在使用OpenSSL查看證書過期時間時,有多種方法可以選擇。通過編寫自動化腳本和結合監控系統,可以定期檢查證書有效期,避免證書過期造成的安全問題。
域名頻道IDC知識庫