acme.sh 使用記錄

官方安裝和使用文檔:https://github.com/Neilpang/acme.sh/wiki/說明

HTTP 方式生成證書

該方法生成的證書不支持泛域名。
還有一點,acme.sh 檢測的 nginx 配置文件必須位於 /etc/nginx/sites-enabled 下。

acme.sh --issue -d cdn.example.com --nginx

發現的問題

acme.sh 並不能增量的增加子域名,如現在已有 a.example.com 的證書,想要增加 b.example.com,該腳本就會替換現有的 fullchain.cer 文件,從而導致之前的證書失效。
所以想要添加子域名 b.example.com 的話,要同時創建 a.example.com 和 b.example.com,當子域名數量過多的話,就會觸發 Let's Encrypt 的速率限制,比較噁心。

DNS 方式生成證書

該方法生成的證書支持泛域名,從長遠角度考慮比較方便,筆者最終採用的就是這種方法。

DNS 方式簡單來說就是需要你在 DNS 解析上增加一個 TXT 記錄,用於表明該域名歸屬於你。
但這裏有個問題:Let’s Encrypy 的證書 3 個月後就會過期,難不成每 3 個月都重新手動操作一遍嗎?這也違背了 acme.sh 腳本的初衷。所以這裏需要利用 DNS 服務商的 API,這樣 acme.sh 可以自動的完成這一切。每一家 DNS 的具體配置方式不一致,請自行查閱官方文檔:https://github.com/Neilpang/acme.sh/wiki/dnsapi

export CF_Key="***************************"
export CF_Email="******@163.com"
acme.sh --issue --dns dns_cf -d example.com -d *.example.com

安裝證書

acme.sh --installcert -d example.com \
  --key-file /etc/nginx/ssl/example.com.key \
  --fullchain-file /etc/nginx/ssl/fullchain.cer \
  --reloadcmd "systemctl force-reload nginx"

注意這裏的 reloadcmd 參數,這是 nginx 重啓的命令,如果你沒有使用 systemd 或者說你是直接用的 nginx 命令,那請修改對應的命令爲:

  1. 關閉 nginx
  2. 開啓 nginx

因爲 nginx -s reload 命令並不能重新加載證書。

遇到的一些其他問題

怎麼避免連續多次失敗觸發 Rate limit ?

運行 acme.sh 的時候加上參數 --test

觸發 Let’s Encrpty 的 Rate limit 怎麼辦?

可以刪除 ~/.acme.sh 再重新安裝操作。

發佈了108 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章