HTTPS 證書自動更新方案
背景
需要爲服務配置 HTTPS 證書,並實現證書的自動更新功能。
解決方案
使用 acme.sh 實現證書的自動更新。以下是具體的實施步驟:
- 安裝 acme.sh
curl https://get.acme.sh | sh
安裝完成後,系統會自動添加定時任務:
$ crontab -l
23 2 * * * "/home/xxxx/.acme.sh"/acme.sh --cron --home "/home/xxxx/.acme.sh" > /dev/null
- 配置證書
2.1 設置默認 CA 服務器
$ acme.sh --set-default-ca --server letsencrypt
[Sun Mar 10 13:43:47 CST 2024] Changed default CA to: https://acme-v02.api.letsencrypt.org/directory
2.2 簽發證書
使用阿里雲域名解析 API 簽發證書:
$ acme.sh --issue --dns dns_ali -d yoursite.com
2.3 安裝證書
將證書安裝到指定目錄(如果遇到權限問題,需要先 chown 相關文件):
acme.sh --install-cert -d yoursite.com \
--key-file /etc/nginx/conf.d/yoursite.com.key \
--fullchain-file /etc/nginx/conf.d/fullchain.cer \
--reloadcmd "sudo systemctl restart nginx"
2.4 泛域名證書
如需簽發泛域名證書,命令如下:
acme.sh --issue --dns dns_ali -d yoursite.com -d *.yoursite.com
- Slack 通知配置
3.1 設置環境變量
export SLACK_WEBHOOK_URL="..."
export SLACK_CHANNEL="..." # 可選:覆蓋 Webhook 默認頻道
export SLACK_USER # 可選:覆蓋 Webhook 默認用戶名
3.2 啓用通知
acme.sh --set-notify --notify-hook slack
通知效果如下:
注意事項
- 不建議直接拷貝證書文件,應使用
--install-cert
命令安裝。原因是:
-
直接拷貝無法記錄證書路徑信息
-
影響自動更新時的重載操作
- 配置文件說明:
$ cat yoursite.com.conf
Le_Domain='yoursite.com'
Le_RealKeyPath='/etc/nginx/conf.d/yoursite.com.key'
Le_RealFullChainPath='/etc/nginx/conf.d/fullchain.cer'
Le_ReloadCmd='__ACME_BASE64__START_c3VkbyBzeXN0ZW1jdGwgcmVzdGFydCBuZ2lueA==__ACME_BASE64__END_'
重載命令使用 base64 編碼:
$ echo -n 'c3VkbyBzeXN0ZW1jdGwgcmVzdGFydCBuZ2lueA==' | base64 -d
sudo systemctl restart nginx
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/lguHteme0iFXOAY2pBkMJQ