SSL憑證申請是網站上線前的必要步驟之一,看似只是讓網址前面出現一把小鎖,實際上卻是資安防護、瀏覽器信任度、甚至 SEO 排名的基礎關卡。憑證一旦過期或設定錯誤,輕則瀏覽器跳出警告嚇跑使用者,重則整個網站被標記為不安全。本篇文章完整說明 SSL/TLS 憑證的種類差異、Let’s Encrypt 免費憑證的 SSL憑證申請流程、Certbot 自動續期設定,並補充常見錯誤排除方法,適合工程師快速查閱與新手入門。
文章目錄
一、觀念釐清:SSL 與 TLS、憑證種類差異
在申請憑證之前,必須先分清楚幾個常被混用的名詞:
SSL 與 TLS 差異| 名稱 | 說明 |
|---|---|
| SSL(Secure Sockets Layer) | 較早期的加密協定,已被淘汰,但業界仍習慣用「SSL 憑證」泛稱網站加密憑證 |
| TLS(Transport Layer Security) | SSL 的後繼者,目前實際運作的協定版本,主流為 TLS 1.2 / 1.3 |
也就是說,現在申請的「SSL 憑證」實際上底層跑的都是 TLS 協定,這是業界用語習慣,不影響實際申請與設定。
憑證驗證等級差異| 驗證等級 | 說明 | 適用情境 |
|---|---|---|
| DV(Domain Validation) | 僅驗證網域擁有權,申請速度快,多數免費 | 個人網站、部落格、一般中小型網站 |
| OV(Organization Validation) | 額外驗證公司登記資料 | 企業官網、需要展示公司身分的網站 |
| EV(Extended Validation) | 最嚴格審核流程,過去會在網址列顯示公司名稱 | 金融、電商等高信任需求網站 |
Let’s Encrypt 提供的是 DV 等級免費憑證,對絕大多數網站與伺服器已經足夠。
對第一次接觸 SSL憑證申請流程的工程師來說,最常見的疑問是「到底要不要花錢買憑證」。實務上判斷方式很單純:如果網站不需要對外展示公司身分(例如個人網站、部落格、內部系統、一般中小企業官網),DV 等級的免費憑證就足以應付加密需求;只有在需要向使用者證明「這是某某公司官方網站」的情境下,才需要額外花費申請 OV 或 EV 憑證。理解這個分界,能省下大部分不必要的憑證採購成本。
二、Let’s Encrypt 是什麼?為什麼推薦使用
Let’s Encrypt 是由非營利組織 ISRG 提供的免費憑證簽發服務,目前是全球使用率最高的憑證來源之一。
推薦使用的原因:
- 完全免費,無限次數申請與續期
- 透過 Certbot 等工具可自動化申請與續期,不需人工介入
- 憑證有效期為 90 天,強制養成定期續期習慣,降低憑證長期未更新的風險
- 主流瀏覽器與作業系統皆已內建信任 Let’s Encrypt 的憑證鏈
💡 記住一個原則:個人網站或中小型網站,Let’s Encrypt 免費憑證通常就足夠;企業官網若需要展示公司身分,才需要考慮付費 OV / EV 憑證。
三、SSL憑證申請實作:Certbot 安裝與指令教學
Certbot 是 Let’s Encrypt 官方推薦的自動化憑證申請工具,支援多種作業系統與網頁伺服器,是目前 SSL憑證申請流程中最常用的工具之一。完整參數說明可參考 Certbot 官方文件,憑證機構說明則可參考 Let’s Encrypt 官方網站。
# Ubuntu / Debian 系統安裝 Certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
# CentOS / RHEL / Rocky Linux 系統安裝 Certbot
sudo dnf install certbot python3-certbot-nginx -y
# 申請憑證(Nginx 環境,自動設定)
sudo certbot --nginx -d example.com -d www.example.com
# 申請憑證(僅取得憑證檔案,手動設定伺服器)
sudo certbot certonly --nginx -d example.com
# 查看目前已申請的憑證
sudo certbot certificates
# 手動測試續期(不會真的更新,僅測試流程是否正常)
sudo certbot renew --dry-run
四、Nginx / Apache 憑證套用設定
使用 certbot --nginx 或 certbot --apache 參數時,Certbot 會自動修改伺服器設定檔並套用憑證,不需要手動編輯。若是使用 certonly 取得憑證檔案,則需要自行在設定檔中指定路徑:
# Nginx 設定範例
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
# 設定完成後測試語法並套用
sudo nginx -t
sudo systemctl reload nginx
Apache 環境對應指令:
sudo dnf install certbot python3-certbot-apache -y
sudo certbot --apache -d example.com -d www.example.com
sudo apachectl configtest
sudo systemctl reload httpd
五、自動續期設定:一勞永逸的做法
Let’s Encrypt 憑證效期只有 90 天,若沒有設定自動續期,過期後網站會直接跳出瀏覽器安全警告。Certbot 安裝時通常會自動建立排程,但建議手動確認:
# 確認 systemd timer 是否已啟用(多數發行版預設已有)
sudo systemctl list-timers | grep certbot
# 若沒有自動排程,可自行加入 crontab
sudo crontab -e
# 加入以下這行,每天凌晨 3 點檢查並自動續期
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
六、憑證種類快速判斷表
依網站類型選擇憑證| 網站類型 | 建議憑證 |
|---|---|
| 個人部落格 / 作品集 | Let’s Encrypt 免費 DV 憑證 |
| 中小企業官網 | Let’s Encrypt 免費 DV 憑證,或付費 OV 憑證 |
| 電商網站 | 付費 OV 憑證,視金流商要求而定 |
| 金融 / 高信任需求網站 | 付費 EV 憑證 |
| 內部系統 / 測試環境 | 自簽憑證(Self-Signed)或內網 CA |
七、完整申請檢查清單(Cheat Sheet)
以下整理一套「從零開始 SSL憑證申請並上線」的標準流程:
# 1. 確認網域 DNS 已正確指向伺服器 IP
# 2. 確認 80 / 443 Port 已在防火牆開放(否則驗證會失敗)
# 3. 安裝 Certbot 及對應的 Nginx / Apache 外掛
# 4. 執行憑證申請指令,依提示輸入 Email 與同意條款
# 5. 確認伺服器設定檔已正確載入憑證路徑
# 6. 測試設定檔語法(nginx -t / apachectl configtest)後 reload 服務
# 7. 用瀏覽器實際檢查憑證資訊,確認鎖頭顯示正常、無警告
# 8. 設定自動續期排程,並定期確認排程是否正常執行
八、常見問題 FAQ
SSL憑證申請一定要付費嗎?Let’s Encrypt 安全嗎?
憑證申請失敗,出現 DNS 驗證錯誤怎麼辦?
Certbot 自動續期後為什麼服務沒有生效?
--post-hook 自動觸發服務 reload,避免憑證更新了但服務還在用舊憑證。一張憑證可以同時保護多個網域嗎?
憑證過期會發生什麼事?
可以在同一台伺服器申請多張憑證嗎?
內部測試環境也需要申請 Let’s Encrypt 憑證嗎?
憑證到期前多久會收到通知?
九、小結
SSL憑證申請的核心原則是:免費的 Let’s Encrypt 搭配 Certbot 自動續期,就能滿足絕大多數網站的加密需求,重點在於申請前確認 DNS 與 Port 是否就緒,申請後務必設定好自動續期排程。掌握 DV / OV / EV 的差異,就能依網站性質判斷是否需要升級到付費憑證。
實務設定時,記得申請前先確認網域解析與防火牆設定,續期排程加上服務 reload 的 Hook,並定期用瀏覽器實際檢查憑證狀態,才能避免憑證過期導致網站被標記不安全的情況發生。完成 SSL憑證申請並設好自動續期後,網站的加密防護基本上就不需要再手動維護。
本文為 SSL/TLS 憑證申請教學整理,適用於一般網站與中小型伺服器環境,企業級憑證選型仍建議依實際業務需求與金流商規範調整。
