之前域名都是用的 阿里雲盾證書服務 ,因爲是一起申請,所以每年更新一下問題不大。

雖然 Let's Encrypt 在免費SSL證書裏能說是最有人氣(最大因素在於支持 泛域名 ),但以前需要每3個月手工更新一次,雖有自動更新可不夠穩定,如果不注意就比較尷尬。

而現在 acme.sh 已經比較成熟,很好解決了自動續期問題。最近加兩個子域名,又正好下月 SSL證書 到期,藉此契機換成 Let's Encrypt 證書。

並且國內的 雲盾證書服務 都會有申請限制,就拿阿里雲的說明爲例: 個人型SSL證書,保護一個域名。瀏覽器上有https提示並有綠鎖標記。快速簽發,適合個人和小微企業,支持個人/企業申請。一個阿里雲帳戶最多簽發20張。 我們來劃下重點 一個阿里雲帳戶最多20張 ,也就是一個正好終身只能申請20次,域名/子域多的話,還是消耗的挺快。

有關阿里雲的 SSL證書 的介紹和安裝,可以查看我之前的文章: 《阿里雲 免費SSL證書安裝小記》

操作步驟:

acme.sh

只要簡單的6步操作,即可完成。

一、登陸阿里雲

# 登陸阿里雲
ssh root@SeverIp

普通用戶和 root 用戶都可以

二、安裝 acme.sh

# 執行安裝命令
`curl  https://get.acme.sh | sh`

執行成功後會自動安裝到:~/.acme.sh/

如果遇到以下錯誤提示,需要先安裝 socat 依賴包 yum install socat -y 再執行安裝命令。

# 錯誤信息:
······
[2020年 03月 15日 星期五 23:19:10 CST] It is recommended to install socat first.
[2020年 03月 15日 星期五 23:19:10 CST] We use socat for standalone server if you use standalone mode.
[2020年 03月 15日 星期五 23:19:10 CST] If you don't use standalone mode, just ignore this warning.
······

三、導入密鑰

acme.sh 目前支持 cloudflare , dnspod , cloudxns , godaddy 以及 ovh 等數十種解析商的自動集成。可以使用域名解析商提供的 api 自動添加 txt 記錄完成驗證。

密鑰只需導入一次即可,根據你所使用的域名解析服務商而定,本文提供 DNSPodAliYun 2個導入方式。

DNSPod 域名解析

由於我是使用的是 DNSPod 解析服務,那就登錄 DNSPod 官網生,成所需的 api idapi key

操作方法:點擊右上角頭像 -> 我的賬號 -> 賬號中心 -> 密鑰管理 -> 創建密鑰

然後執行導入命令:

# DNSPod
export DP_Id="YourID"
export DP_Key="YourKey"

PS:創建密鑰具體位置,可能隨網站改版而略有調整

萬網/阿里雲 域名解析

如果你是使用 萬網/阿里雲 的 NDS 解析:

操作方法:點擊右上角頭像 -> 選擇 AccessKey -> 點擊 開始使用子用戶AccessKey -> 起個自定義名稱 -> 搜索 NDS -> 選擇 系統 AliyunDNSFullAccess

然後執行導入命令:

# AliYun
export Ali_Key="YourKey"
export Ali_Secret="YourSecret"

四、生成證書(簽發通配符證書)

# 執行以下命令
acme.sh --issue --dns dns_dp -d *.YourDomain.com
# 命令執行成功後的顯示
[2020年 03月 15日 星期五 23:19:10 CST] Creating domain key
······
[2020年 03月 15日 星期五 23:19:10 CST] The txt record is added: Success.
[2020年 03月 15日 星期五 23:19:10 CST] Let's check each dns records now. Sleep 20 seconds first.
······
[2020年 03月 15日 星期五 23:19:10 CST] Pending
[2020年 03月 15日 星期五 23:19:10 CST] Pending
[2020年 03月 15日 星期五 23:19:10 CST] Pending
[2020年 03月 15日 星期五 23:19:10 CST] Pending
[2020年 03月 15日 星期五 23:19:10 CST] Success
······
[2020年 03月 15日 星期五 23:19:10 CST] Verify finished, start to sign.
······
[2020年 03月 15日 星期五 23:19:10 CST] Cert success.

最後看到 Cert success 表示申請成功

證書會存放在 ~/.acme.sh/*.YourDomain.com/

五、證書拷貝到 Nginx

# 執行以下命令
acme.sh --installcert -d *.YourDomain.com \
--key-file       /Nginx目錄/存放證書的目錄/key名稱.pem  \
--fullchain-file /Nginx目錄/存放證書的目錄/cert名稱.pem \
--reloadcmd     "service nginx force-reload"

--installcert 命令至關重要,當證書更新以後, reloadcmd 會被自動調用,讓服務器生效。

目前證書在 60 天以後會自動更新,無需任何操作。

# 命令執行成功後的顯示
[2020年 03月 15日 星期五 23:19:10 CST] Installing key to:/Nginx目錄/存放證書的目錄/key.pem
[2020年 03月 15日 星期五 23:19:10 CST] Installing full chain to:/Nginx目錄/存放證書的目錄/cert.pem
[2020年 03月 15日 星期五 23:19:10 CST] Run reload cmd: service nginx force-reload
Redirecting to /bin/systemctl force-reload  nginx.service
[2020年 03月 15日 星期五 23:19:10 CST] Reload success

六、配置 Nginx

修改 Nginx 配置,將 ssl_certificatessl_certificate_key 指向新證書存放位置。

server {
  listen 443;
  // ······
  // 修改證書路徑
  ssl_certificate         存放證書的目錄/cert名稱.pem;
  ssl_certificate_key     存放證書的目錄/key名稱.pem;
  // ······
}

如果你是初次安裝 SSL證書,別忘記設置 301跳轉 ,把 HTTP 指向 HTTPS。

參考資料

acme.sh wiki

相關文章