acme.sh + Google Cloud DNS 自動更新 Let's Encrypt 服務

安裝 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 資料夾

 

安裝 google SDK 套件


首先要先安裝 Google Cloud SDK 套件才能跟 Google Cloud DNS 服務使用, BUBU 使用環境是  CentOS 7 ,所以參考官方 Cloud SDK 手冊

# Update YUM with Cloud SDK repo information:
sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
[google-cloud-sdk]
name=Google Cloud SDK
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
       https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOM

新增完之後安裝 SDK 套件

yum install google-cloud-sdk -y

執行 Google Cloud SDK 首次安裝設定服務

執行命令
gcloud init
設定畫面如下
Welcome! This command will take you through the configuration of gcloud.

Your current configuration has been set to: [default]

You can skip diagnostics next time by using the following flag:
  gcloud init --skip-diagnostics

Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.
Reachability Check passed.
Network diagnostic passed (1/1 checks passed).
需要跟 google 帳號接合就按下 y 就可以了
You must log in to continue. Would you like to log in (Y/n)?  y
將下列網址複製到網頁上去會顯示要登入GCP 服務帳號
Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/

輸入登入後畫面上所顯示的 code 碼
Enter verification code:


To take a quick anonymous survey, run:
  $ gcloud alpha survey

You are logged in as: [[email protected]].

顯示要控制那個專案例如果是使用 DNS 服務就選擇 DNS 
Pick cloud project to use:
 [1] wiki
 [2] www
 [3] dns
 [4] Create a new project
Please enter numeric choice or text value (must exactly match list
item):  3

Your current project has been set to: [dns].
輸入 n 就可以了
Do you want to configure a default Compute Region and Zone? (Y/n)?  n

設定腳本


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

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

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

export CLOUDSDK_ACTIVE_CONFIG_NAME=default

/root/.acme.sh/acme.sh --issue --dns dns_gcloud -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 CLOUDSDK_ACTIVE_CONFIG_NAME=default

/root/.acme.sh/acme.sh --issue --dns dns_gcloud -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

 

 

參考相關網頁: