acme.sh
是一個小巧又強大的工具,用來管理 SSL/TLS 證書。它支援多家 CA(證書頒發機構),但當你想更換 CA 時,找不到指令就容易讓人抓狂——不過別擔心,這份 tutorial 將帶你一步步完成切換,並附上一些調侃,幫你紓解壓力!
第一步:查看支援的 CA
你可以參考官方的 Wiki 頁面,裡面列出了所有支援的 CA。
目前支援的簽發機構如下:
Short Name | ACME Server URL | 用途 |
---|---|---|
letsencrypt |
https://acme-v02.api.letsencrypt.org/directory |
主流的 Let’s Encrypt |
letsencrypt_test |
https://acme-staging-v02.api.letsencrypt.org/directory |
測試環境 |
buypass |
https://api.buypass.com/acme/directory |
BuyPass.com CA |
buypass_test |
https://api.test4.buypass.no/acme/directory |
BuyPass.com 測試 |
zerossl |
https://acme.zerossl.com/v2/DV90 |
ZeroSSL.com CA |
sslcom |
https://acme.ssl.com/sslcom-dv-rsa 或 sslcom-dv-ecc |
SSL.com CA |
google |
https://dv.acme-v02.api.pki.goog/directory |
Google Public CA |
googletest |
https://dv.acme-v02.test-api.pki.goog/directory |
Google 測試 CA |
支援的機構還挺多的,但選擇一多,反而讓人困惑——到底選哪一個才適合呢?別糾結,常見的用 letsencrypt
或 zerossl
就夠了。
第二步:切換 CA
選好了目標 CA 後,用以下指令切換:
|
|
舉個例子:
- 如果想用 Let’s Encrypt(經典之選):
1
acme.sh --set-default-ca --server letsencrypt
- 想試試 ZeroSSL(折騰派選擇):
1
acme.sh --set-default-ca --server zerossl
吐槽時間:
- 為什麼不提供一個互動式介面,例如“請選擇你的 CA”,這樣能更直觀一些。
- ZeroSSL 非得註冊 API 密鑰,這種強制登入的體驗,總讓我懷疑免費是不是套路。
第三步:確認是否切換成功
命令執行完畢後,最好驗證一下當前使用的預設 CA,確保沒填錯:
|
|
如果看到類似這樣的輸出:
|
|
或者:
|
|
那就表示切換成功啦!
這條命令只會告訴你“預設 CA 是什麼”,也不能附加點提示信息,比如“切換成功,歡迎使用新 CA!”。
第四步:重新簽發證書
為了確保新 CA 能正常工作,你需要重新簽發一次證書:
|
|
吐槽時間:
- 每次重新簽發都得加
--force
,要是忘了,系統就會“假裝沒聽見”,真讓人浪費時間。 - 配額限制和 API 失敗問題經常讓人抓狂,比如 Let’s Encrypt 的每週簽發限制 50 次,總讓人覺得在提醒你“別隨便浪費免費資源”。
特殊場景:不同域名用不同 CA
如果需要對某些域名使用特定的 CA,可以直接在簽發時指定:
|
|
對於有大量域名的用戶,手動配置不同 CA 簡直就是“勤勞人的修行”,期待未來能有批量管理功能。
注意事項(必看,防踩坑)
-
ZeroSSL 的 API 密鑰
如果你選擇 ZeroSSL,需要提前註冊帳號並獲取 API 密鑰:1
acme.sh --register-account --server zerossl --accountemail [email protected]
免費證書搞得像個 SaaS 服務,這種“改良”方式真的更好了嗎?
-
相容性問題
如果你的伺服器很老舊(比如某些根證書都不更新的系統),可能無法支援新 CA 的根證書,例如 ZeroSSL。如果發現 SSL 報錯,十有八九是這個問題。 -
重啟服務
別忘了重新載入 Web 服務配置,套用新證書:1 2 3 4 5
# 重啟 Nginx systemctl reload nginx # 重啟 Apache systemctl reload apache2
總結
雖然更換 CA 的流程看似簡單,但總是有一些小坑會讓人抓狂。不過,掌握了上述步驟,你就能快速完成切換,不再被各種錯誤信息左右。
最後再提醒一句:別忘了對新證書做相容性測試,別等上線時才發現出問題,那才叫“驚喜”。