10分鐘搞定 Let’s Encrypt 泛域名 SSL 證書
之前域名都是用的 阿里雲盾證書服務
,因爲是一起申請,所以每年更新一下問題不大。
雖然 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 記錄完成驗證。
密鑰只需導入一次即可,根據你所使用的域名解析服務商而定,本文提供 DNSPod
和 AliYun
2個導入方式。
DNSPod 域名解析
由於我是使用的是 DNSPod
解析服務,那就登錄 DNSPod
官網生,成所需的 api id
和 api 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_certificate
和 ssl_certificate_key
指向新證書存放位置。
server { listen 443; // ······ // 修改證書路徑 ssl_certificate 存放證書的目錄/cert名稱.pem; ssl_certificate_key 存放證書的目錄/key名稱.pem; // ······ }
如果你是初次安裝 SSL證書,別忘記設置 301跳轉
,把 HTTP 指向 HTTPS。