acme.sh可以通過acme協議生成Let’s Encrypt頒發的SSL證書。
Let’s Encrypt 提供了單域名證書,泛域名證書和多域名證書
0.GitHub地址
1.在線安裝
curl https://get.acme.sh | sh
OR
wget -O - https://get.acme.sh | sh
創建acme.sh別名
alias acme.sh=~/.acme.sh/acme.sh
安裝過程中會添加cronjob,每天自動檢測所有證書是否需要更新。查看定時任務(證書有效期一般為90天,acme.sh會在證書失效之前進行自動更新):
crontab -e
2.設置acme.sh自動升級
acme.sh --upgrade --auto-upgrade
3.使用DNS API(泛域名證書只能通過DNS API申請)
必要條件:域名已經添加了解析(綁定了服務器IP)
acme.sh提供了兩種方式進行驗證域名所有權,一種是通過HTTP API,另一種是通過DNS API。
- HTTP API通過修改Apache和NGINX配置,在根目錄添加文件, 通過域名可以訪問到該文件,驗證成功。
- DNS API 通過雲服務商提供的API(需要雲服務商支持),在DNS添加一條TXT解析記錄,添加成功則驗證通過。國內的雲服務比如jdcloud,Aliyun,DNSPod都可以使用這種方式。如果雲服務商不在支持的列表里,可以使用騰訊雲的DNSPod作為域名解析。
4.自動發布證書
a.登錄控制台(dnsapi 用法說明中有對應服務商地址)獲取api key id 和 api key secret
b.導出到系統變量
export JD_ACCESS_KEY_ID="sdfsdfsdfljlbjkljlkjsdfoiwje"
export JD_ACCESS_KEY_SECRET="xxxxxxx"
#查看添加的系統變量
echo $JD_ACCESS_KEY_ID
c.通過DNS API驗證所有權,並生成證書(證書默認被保存在~/.acme.sh/目錄中)
acme.sh --issue --dns dns_jd -d example.com -d '*.example.com'
id和key會被保存到~/.acme.sh/account.conf文件中,如果id或key發生變更,可能需要進行修改
d.copy/安裝 證書(如果不使用install-cert命令進行安裝,證書更新之后還是被保存在默認目錄,會導致已有證書過期之后無法被自動更新)
acme.sh --install-cert -d myflag.xyz \
--key-file /etc/nginx/ssl/key.pem \
--fullchain-file /etc/nginx/ssl/cert.pem \
--reloadcmd "service nginx force-reload"
只用輸入域名即可,不需要添加其他前綴
指定的所有參數都會被自動記錄下來, 並在將來證書自動更新以后, 被再次自動調用

