acme.sh + Cloudflare 自動更新 Let's Encrypt 服務

之前 BUBU 是使用萬用字元方式來更新憑證,結果之前憑證快到期了,發現到自動更換憑證是無法使用的,結果導至只能用手動方式去更換憑證,現在可以使用域網服務商上面的 API 方式來進行更新憑證。

安裝 acme.sh 此套件,該套件已有建立好已有提供的 API 功能,如果所採買的網域商裡面有提供 API 介面的話,可以查詢一下怎麼使用,該套件裡面有解說每個 API 要怎麼使用。

安裝 acme.sh 套件

 


Check this project: https://github.com/Neilpang/acme.sh

 

curl https://get.acme.sh | sh

Or:

wget -O -  https://get.acme.sh | sh

安裝完之後會在 root 目錄下產生一個 .acme.sh 資料夾

 

CloudFlare 設定


登入您的 CloudFlare,把您的 Global Key 複製起來

登入後畫面如下

2

3

 

再來使用腳本方式  shell script 來更新憑證,產生的憑證會一份是在 acme.sh 目錄下會看到此目錄

acme.sh 每 60 天會自動重新加載這個指令來自動續期憑證,完全不需手動執行任何操作!

P.S 如果你有很多網域想要使用一個憑證是可以的

export CF_Key="Your_CloudFlare_API_Key"
export CF_Email="[email protected]"

/root/.acme.sh/acme.sh --issue --dns dns_cf -d "*.YourDomainName.com" -d "YourDomainName.com" --log \
--cert-file /etc/nginx/ssl/cert.crt \              # 複製憑證到指定的目錄下面
--key-file /etc/nginx/ssl/key.key \                # 複製憑證到指定的目錄下面
--fullchain-file /etc/nginx/ssl/fullchain.crt \    # 複製憑證到指定的目錄下面
--ca-file /etc/nginx/ssl/ca.crt \                  # 複製憑證到指定的目錄下面
--reloadcmd "systemctl reload nginx"               # 如果是用 Apache 請自己修改 

OR

export CF_Key="Your_CloudFlare_API_Key"
export CF_Email="[email protected]"

/root/.acme.sh/acme.sh --issue --dns dns_cf -d "*.YourDomainName.com" -d "YourDomainName.com" --log \
--cert-file /etc/nginx/ssl/cert.pem \              # 複製憑證到指定的目錄下面
--key-file /etc/nginx/ssl/key.pem \                # 複製憑證到指定的目錄下面
--fullchain-file /etc/nginx/ssl/fullchain.pem \    # 複製憑證到指定的目錄下面
--ca-file /etc/nginx/ssl/ca.pem \                  # 複製憑證到指定的目錄下面
--reloadcmd "systemctl reload nginx"               # 如果是用 Apache 請自己修改 

 

將剛剛手動增加的腳本加入可以執行的權限,命令如下:

chmod a+x 腳本檔

再去執行此腳本之後就結束了。

然後再把產生出來的憑證複製到其他主機上就可以了

 

自動更新 acme.sh


因 acme.sh 會不定時更新系統資訊,會建議讓系統自動去更新 acme.sh 的資料

手動更新:

acme.sh --upgrade

啟用自動更新:

acme.sh --upgrade --auto-upgrade

禁用自動更新:

acme.sh --upgrade --auto-upgrade 0

 

停止自動續期憑證


將 -d 後面的修改成不要繼續使用憑證

acme.sh --remove -d xxx.com

 

補充說明


憑證檔案分別會有 4 個
檔案名稱 說明
cert.pem 申請網域的憑證
chain.pem Let's Encrypt 的憑證
fullchain.pem cert.pem 及 chain.pem 合併檔案
privkey.pem 申請網域的憑證密鑰

 

強制更新憑證


acme.sh --renew --force -d "*.YourDomainName.com" -d "YourDomainName.com" --dns dns_cf --log

 

 

 

 

參考相關網頁: