# SSL 憑證到期

本頁說明 go-web-monitor 如何取得 SSL 憑證剩餘天數，以及表格中的顏色門檻。

## 取得方式

`util.CheckExpire()`（`internal/util/ssl.go:11`）在 HTTP 請求有回應後執行：

1. 從網址去掉 `https://` 前綴，取第一個 `/` 之前的字串當作主機名稱。
2. 以 `tls.Dial` 連線 `<host>:443`，使用系統預設的憑證驗證。
3. 讀取對方送出的第一張憑證（葉憑證）的 `NotAfter`。
4. 剩餘天數 = `NotAfter` 距今的小時數 ÷ 24，無條件捨去為整數。

任何一步失敗都回傳 `0`，表格顯示 `N/A`。

## 顏色門檻

| 剩餘天數 | 表格顯示 | 顏色 |
|---------|---------|------|
| > 30 | `N Days` | 綠 |
| 8–30 | `N Days` | 黃 |
| 1–7 | `N Days` | 紅 |
| 0 或無法取得 | `N/A` | 紅 |

到期天數只顯示在表格中，不會觸發 Email 告警；告警只針對離線（見 [告警規則](/zh/alerting)）。

## 取不到憑證的情況

| 情況 | 原因 |
|------|------|
| 以 `http://` 監控的網站 | 前綴 `http://` 不會被去除，主機名稱解析成 `http:`，連線失敗 |
| 網址帶自訂埠（如 `https://example.com:8443`） | 主機名稱含埠號，再接上 `:443` 後位址無效；憑證一律只從 443 埠取得 |
| 憑證驗證失敗（自簽、過期、主機名稱不符） | `tls.Dial` 使用預設驗證，驗證失敗即回傳錯誤 |
| HTTP 請求本身失敗 | 不會執行 SSL 檢查 |
