HTTPS 證書自動更新方案

背景

需要爲服務配置 HTTPS 證書,並實現證書的自動更新功能。

解決方案

使用 acme.sh 實現證書的自動更新。以下是具體的實施步驟:

  1. 安裝 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
  1. 配置證書

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
  1. Slack 通知配置

3.1 設置環境變量

export SLACK_WEBHOOK_URL="..."
export SLACK_CHANNEL="..."     # 可選:覆蓋 Webhook 默認頻道
export SLACK_USER    # 可選:覆蓋 Webhook 默認用戶名

3.2 啓用通知

acme.sh --set-notify --notify-hook slack

通知效果如下:

注意事項

  1. 不建議直接拷貝證書文件,應使用 --install-cert 命令安裝。原因是:
  1. 配置文件說明:
$ 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