acme.sh簽發泛域名證書【含簽發失敗處理方式】
前言
使用acme.sh原由:因為項目使用到的子域名比較多,公司沒有購買泛域名證書,證書到期后一個個替換太麻煩了,所以使用acme.sh來生成泛域名證書,雖然有效周期較短,但是可以自動續期,還是比較完美的。
環境:docker swarm集群,使用docker stack來部署應用
反向代理:traefik
生成證書的方式
方式一:通過http方式,該種方式是通過訪問.well-known目錄下的文件來實現,也就是說需要再單獨搭建一個服務供acme訪問
方式二:通過dns方式,需要自動添加dns txt記錄來進行驗證,該種方式需要提供操作dns的secret key 和secret id。比如使用的是阿里云,那么可以在控制臺獲取到id 和key
在本文中,采用第二種部署方式【dnspod解析】。
部署過程
docker network create --driver=overlay my_proxy
vim acme.yaml
version: '3'
services:
acme:
image: neilpang/acme.sh:3.0.0
volumes:
- ./nginx:/var/www
- ./acme.sh:/acme.sh # dns方式生辰的證書所在目錄/acme.sh/域名/證書文件
command: daemon
environment:
HTTP_PROXY: "http://192.168.1.77:7890" # 因為需要訪問墻外所以設置了代理
HTTPS_PROXY: "http://192.168.1.77:7890"
networks:
- my_proxy
networks:
my_proxy:
external: true
獲取dnspod域名解析id和Key

注冊賬號+生成證書
進入acme.sh容器內部,執行以下命令
/ # acme.sh --register-account -m xxx@163.com
/ # export DP_Id="一串數字"
/ # export DP_Key="xxx"
acme.sh --issue --dns dns_dp -d xxx.com -d *.xxx.com
有如下輸出,表示證書簽發成功

更新證書失敗?不要慌,有方法!
遇到的問題:證書到期了,重新簽發的時候一直提示sleep 10 and retry
排查思路:
1.acme.sh服務器是否能正常使用魔法
2.acme.sh調用證書簽發服務器接口是否正常
3.域名token和id是否正確
故障確認:由于【排查思路中的第二種情況】無法正常更新證書
解決思路:
1.還是用同一個服務商但需要更換簽發服務器接口地址(如從https://a-01.abc.com/qi換到https://a-02.abc.com/qi)
2.直接更換成可用的簽發服務商
方案選擇:第二種【直接更換簽發服務商】,從zerossl換成letsencrypt
acme.sh支持的所有服務商:Server · acmesh-official/acme.sh Wiki (github.com)
具體更換步驟:
1.acme.sh更新:acme.sh upgrade
2.切換默認簽發服務商為letsencrypt:acme.sh --set-default-ca --server letsencrypt
或者在注冊賬號時指定簽發服務:acme.sh --register-account -m 郵箱地址 --server letsencrypt
3.執行簽發命令:acme.sh --issue --dns dns_dp -d xxx.com -d *.xxx.com ## 成功!
4.證書位置:/acme.sh/xxx.com_ecc
別走,還有其他內容你也需要了解
- 在acme.sh容器中,我們配置了dns解析的id和key,以及注冊的賬號,這些信息都在【account.conf】文件中
- 域名簽發相關信息的配置文件:/acme.sh/域名/【域名.conf】,如:我的域名是aaa.com,那么該配置文件是:/acme.sh/aaa.com/aaa.com.conf
大致內容如下:
Le_Domain='xxx.com'
Le_Alt='*.xxx.com'
Le_Webroot='dns_dp'
Le_PreHook=''
Le_PostHook=''
Le_RenewHook=''
Le_API='https://acme-v02.api.letsencrypt.org/directory'
Le_Keylength='ec-256'
Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/15067723dd6/235ccd027676'
Le_LinkOrder='https://acme-v02.api.letsencrypt.org/acme/order/15067723dd6/2d30ff27676'
Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/03f26088e2d4ae1eb08a89053e32ff731a'
Le_CertCreateTime='1704769093'
Le_CertCreateTimeStr='2024-01-09T02:58:13Z'
Le_NextRenewTimeStr='2024-03-08T02:58:13Z'
Le_NextRenewTime='1709866693'
從配置文件中我們可以確認該域名使用的具體簽發接口以及使用的算法等
歡迎交流:waqingwa01

浙公網安備 33010602011771號