介紹如何在 Linux 系統中使用 openssl
指令查詢網頁伺服器 TLS/SSL 憑證的有效期限。
如果要透過網路檢查指定網站的 TLS/SSL 憑證有效期限,可以使用以下指令:
# 檢查 officeguide.cc 的 TLS/SSL 憑證有效期限 echo | openssl s_client -servername officeguide.cc -connect officeguide.cc:443 \ | openssl x509 -noout -dates
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R3 verify return:1 depth=0 CN = officeguide.cc verify return:1 DONE notBefore=Mar 22 17:53:53 2021 GMT notAfter=Jun 20 17:53:53 2021 GMT
若寫在指令稿中,可將伺服器與連接埠以變數的方式帶入,比較容易閱讀或修改:
# 檢查 officeguide.cc 的 TLS/SSL 憑證有效期限 SERVER=officeguide.cc PORT=443 echo | openssl s_client -servername $SERVER -connect $SERVER:$PORT \ | openssl x509 -noout -dates
除了透過網路的方式之外,亦可直接在網頁伺服器上直接讀取憑證檔案,檢查網站 TLS/SSL 憑證使用期限:
# 檢查 TLS/SSL 憑證有效期限 sudo openssl x509 -enddate -noout -in /etc/letsencrypt/live/officeguide.cc/cert.pem
notAfter=Jun 20 17:53:53 2021 GMT
亦可從 fullchain.pem
來檢查:
# 檢查 TLS/SSL 憑證有效期限 openssl x509 -enddate -noout -in /etc/letsencrypt/live/officeguide.cc/fullchain.pem
notAfter=Jun 20 17:53:53 2021 GMT
以下指令稿可以將 TLS/SSL 憑證有效期限轉為標準的 ISO 格式日期,方便後續處理:
# 取得 TLS/SSL 憑證有效期限(轉為 ISO 格式日期) CERT=/etc/letsencrypt/live/officeguide.cc/cert.pem date --date="$(openssl x509 -enddate -noout -in $CERT | cut -d= -f 2)" --iso-8601
2021-06-21
openssl
指令搭配 -checkend
參數可以檢查 TLS/SSL 憑證在指定的時間點是否有效。例如檢查 TLS/SSL 憑證在 7 天後是否有效:
# 檢查 TLS/SSL 憑證在 7 天候是否有效 let SECONDS=7*24*60*60 if openssl x509 -checkend $SECONDS -noout -in /etc/letsencrypt/live/officeguide.cc/cert.pem then echo "憑證在 7 天後還有效。" else echo "憑證在 7 天後過期。" fi
憑證在 7 天後還有效。
以下指令稿可以列出伺服器上各網站 TLS/SSL 憑證有效期限:
# 列出伺服器上各網站 TLS/SSL 憑證有效期限 for cert in /etc/letsencrypt/live/*/cert.pem; do printf '%s: %s\n' \ "$(date --date="$(openssl x509 -enddate -noout -in "$cert" | cut -d= -f 2)" --iso-8601)" \ "$cert" done | sort
2021-06-21: /etc/letsencrypt/live/officeguide.cc/cert.pem 2021-07-12: /etc/letsencrypt/live/my.website.com/cert.pem