Let's Encrypt 和 ZeroSSL 是市面上免費 SSL 憑證裡特別有名的兩個方案,不同於付費方案,證書的效期只有三個月,一旦過期便需要再次申請,幸好 gihub 上有大大製作了方便的工具讓我們可以透過自動化腳本與 crontab 排程讓證書無限續期。
ACME 目前預設的證書機構是 ZeroSSL,以下將示範如何在 Nginx 服務器上實現永久自動更新憑證:
先決條件:擁有一個域名、並且託管於 Cloudflare
本例作業系統為 RockyLinux. 9.6、Nginx 安裝版本為 1.20.1
1. 安裝 ACME,任意配置一個信箱作為帳戶名(不會驗證)
[root@nginx ~]# curl https://get.acme.sh | sh -s email=yourname@example.com
2. 取得 Cloudflare 個人帳戶的 API 權杖
3. 編輯
~/.acme.sh/account.conf
,填入 cloudflare 的 API 權杖、cloudflare 登入帳戶與安裝 ACME 時所配置的信箱,此配置是讓 ACME 擁有驗證域名的權限#LOG_FILE="/root/.acme.sh/acme.sh.log"
#LOG_LEVEL=1
#AUTO_UPGRADE="1"
#NO_TIMESTAMP=1
SAVED_CF_Key='865cw83265w11a24p6k583eh1544a7876d5gg'
SAVED_CF_Email='cloudflare@example.com'
ACCOUNT_EMAIL='yourname@example.com'
UPGRADE_HASH='52f021zd028482a6731971a8317289064ge61384'
USER_PATH='/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin'
4. 指定要生成 SSL 憑證(萬用憑證)的域名,成功後會將私鑰與憑證放入下面相對應的路徑
[root@nginx ~]# /root/.acme.sh/acme.sh --issue -d "*.yourdomain.com" -d "yourdomain.com" \
--dns dns_cf \
--cert-file /etc/pki/tls/certs/wildcard.yourdomain.com.crt \
--key-file /etc/pki/tls/private/wildcard.yourdomain.com.key \
--fullchain-file /etc/pki/tls/certs/wildcard.yourdomain.com-chain.crt \
--ca-file /etc/pki/tls/certs/wildcard.yourdomain.com-ca.crt \
--reloadcmd "systemctl reload nginx"
好了,就這麼簡單!當你執行第4步驟時,ACME 私底下已經在 crontab 裡寫好排程、定期幫你更新即將過期的 SSL 憑證,與此同時,也會按照第4步驟裡的參數平滑重啟 Nginx,以讀取更新後的 SSL 憑證。
0 Comments:
張貼留言