所有部署指南 部署

如何檢查 SSL 證書過期時間

過期的 SSL 證書會導致瀏覽器顯示整頁安全警告,阻止訪客訪問你的網站。以下是檢查證書過期時間和設定監控的方法。

透過瀏覽器檢查

  1. 使用 https:// 訪問你的網站
  2. 點選位址列中的鎖頭圖示
  3. 點選 “證書”“連線是安全的” → “證書有效”
  4. 檢視 “有效期至”“到期日期”

使用 OpenSSL 檢查(命令列)

遠端檢查(從任何機器)

echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -enddate

輸出:notAfter=Aug 5 12:00:00 2026 GMT

本地檔案檢查

openssl x509 -noout -enddate -in /etc/ssl/gethttps/fullchain.pem

一次檢視所有詳情

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

一行指令碼檢查

檢查證書是否在 30 天內過期:

if openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -checkend 2592000 > /dev/null 2>&1; then
  echo "Certificate is valid for at least 30 more days"
else
  echo "WARNING: Certificate expires within 30 days!"
fi

批次檢查多個域名

如果你管理多個域名,用迴圈一次性檢查:

for domain in example.com www.example.com api.example.com; do
  expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
  echo "$domain — expires: $expiry"
done

使用 cron 自動監控

建立一個每日 cron 任務,在證書即將在 30 天內過期時傳送郵件提醒:

#!/bin/bash
# Save as /usr/local/bin/check-ssl-expiry.sh

DOMAINS="example.com www.example.com api.example.com"
WARN_DAYS=30
WARN_SECS=$((WARN_DAYS * 86400))

for domain in $DOMAINS; do
  if ! echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | \
    openssl x509 -noout -checkend $WARN_SECS > /dev/null 2>&1; then
    echo "WARNING: $domain certificate expires within $WARN_DAYS days" | \
      mail -s "SSL Expiry Warning: $domain" admin@example.com
  fi
done

新增到 crontab:0 9 * * * /usr/local/bin/check-ssl-expiry.sh

設定監控服務

如需更可靠的方案,使用監控服務:

方式如何操作費用告警方式
日曆提醒設定在簽發後 60 天免費手動
Cron 指令碼每日執行檢查指令碼免費郵件
UptimeRobot新增 SSL 監控,設定告警閾值免費版郵件、Slack、Webhook
Better UptimeSSL 監控配合事件管理免費版郵件、簡訊、Slack
Certbot 自動續簽透過 systemd timer 執行 certbot renew免費完全防止過期

對於 Let’s Encrypt 的 90 天證書,建議在第 60 天續簽(留出 30 天緩衝)。

應該驗證哪些證書詳情?

除了過期日期,定期檢查:

echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -text | grep -E 'Subject:|Issuer:|Not After|DNS:'

這會顯示:

  • Subject/SAN — 證書覆蓋了正確的域名
  • Issuer — 由預期的憑證授權機構簽發(如 Let’s Encrypt)
  • Not After — 過期日期
  • DNS names — SAN 欄位中的所有域名

常見問題

證書過期會怎樣?

瀏覽器會顯示整頁警告,如”您的連線不是私密連線”(Chrome)或”警告:面臨潛在的安全風險”(Firefox)。大多數訪客會立即離開。搜尋引擎也可能降低排名或從索引中移除你的頁面,直到證書續簽。

應該多久檢查一次?

如果你有自動續簽(Certbot),每月檢查一次作為安全保障。如果手動續簽(GetHTTPS),在第 50 天檢查並在第 60 天設定硬性提醒。隨著 2029 年證書有效期縮短到 47 天,監控變得更加關鍵。

沒有命令列許可權能檢查過期時間嗎?

可以。SSL Labs Server Test 和 SSL Shopper 的 SSL Checker 等線上工具可以顯示證書詳情(包括過期日期)——只需輸入你的域名。瀏覽器 DevTools 也能看到(鎖頭圖示 → 證書詳情)。

證書已經過期了怎麼辦?

立即續簽。訪問 GetHTTPS 獲取新證書,替換伺服器上的檔案,然後重新載入 Web 伺服器。整個過程只需 5 分鐘。讓證書過期沒有任何懲罰——續簽並安裝新證書即可。

可以用一個指令碼監控多個域名嗎?

可以。以下指令碼檢查你所有的域名並輸出剩餘天數:

#!/bin/bash
for domain in example.com www.example.com api.example.com; do
  expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
  days_left=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 ))
  if [ "$days_left" -lt 30 ]; then
    echo "WARNING $domain: $days_left days left"
  else
    echo "OK $domain: $days_left days left"
  fi
done

注意:date -d 語法僅適用於 Linux。在 macOS 上使用 date -j -f "%b %d %H:%M:%S %Y %Z"

相關文章

快速開始 2026-05-07
如何續簽 Let's Encrypt 證書
Let's Encrypt 證書每 90 天過期。瞭解如何透過 GetHTTPS(手動)或 Certbot(自動)續簽,併為 47 天有效期做好準備。
SSL 與憑證 2026-05-07
SSL 證書有效期:47 天變更詳解
CA/Browser Forum 投票決定到 2029 年將 SSL 證書有效期縮短至 47 天。瞭解時間線、對你網站的影響,以及如何準備。
部署 2026-05-08
如何在 Nginx 上安裝 SSL 證書
在 Nginx 上安裝 SSL 證書的分步指南。涵蓋檔案上傳、完整 server 塊配置、TLS 最佳實踐、HTTP/2、HSTS、重新導向設定、測試以及 6 個常見錯誤的排查方法。
在瀏覽器中取得免費 SSL 憑證
無需安裝,無需帳號。私鑰始終留在你的裝置上。
取得憑證