acme.sh 快速指南
- 2025-01-09 21:11:00
- 丁国栋
- 原创 26
acme.sh 是一个用于自动化获取和管理 SSL/TLS 证书的命令行工具,它实现了 ACME 协议(自动证书管理环境),主要用于与 Let's Encrypt、ZeroSSL 等提供免费SSL证书的服务进行交互。ACME协议旨在简化证书的申请、验证、签发以及续订过程,使得网站管理员可以更轻松地为其网站部署HTTPS。
使用 acme.sh,可以做到:
- 自动完成域名所有权验证。
- 获取证书并将其安装到你的服务器上。
- 设置定时任务自动更新证书,因为Let's Encrypt等服务签发的证书有效期通常较短(例如90天)。
安装acme.sh
1. 使用官方脚本安装 acme.sh
curl -k https://get.acme.sh | sh -s email=ssl@thedf.cc
注意:默认会安装到当前用户的家目录,除非 sh 命令前有sudo加持则会安装到 root 家目录。
2. 使用源码进行安装
yum install -y socat || apt install -y socat git clone https://github.com/acmesh-official/acme.sh.git cd ./acme.sh ./acme.sh --install
提示:安装后,并不会将 ~/.acme.sh 目录添加到 PATH 变量中,因此使用 acme.sh 命令需要完整的可执行文件路径或者设置 PATH 变量。当然还有更高效的办法,执行 source ~/.acme.sh/acme.sh.env
也能实现一样的效果,后续可添加到 .bashrc 或者 .zshrc 。
安装证书后会在系统计划任务中添加一条计划任务 29 12 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
用于定期更新证书。不必担心更新过于频繁,程序会自己判断是否该更新。
设置申请证书的邮箱,邮箱地址可以收到证书过期通知
acme.sh --register-account -m "ssl@thedf.cc"
申请证书
申请证书有多种办法,这里介绍两种最常用的、可以脚本化执行的方式。
在申请证书时可以设置使用哪一个CA来签发证书,比如可以选择letsencrypt还是zerossl等。
acme.sh --set-default-ca --server letsencrypt
1. 申请单域名证书
申请单域名证书可以使用 webroot 验证方式验证域名所有权。
~/.acme.sh/acme.sh --issue -d demo.thedf.cc -w /var/www/html/ --log
注意:使用 webroot认证时,必须确保该域名的 HTTP 80 端口可以正常访问,否则无法验证成功。
2. 申请泛域名证书
申请 泛域名证书 必须有域名服务商的access key,比如阿里云、腾讯云、AWS 的 access key。
以腾讯云为例:
export Tencent_SecretId="AKIDxxxxx" export Tencent_SecretKey="xxxxxxx" /root/.acme.sh/acme.sh --issue -d 'thedf.cc' -d '*.thedf.cc' --dns dns_tencent
以阿里云为例:
export Ali_Key="LTAIExxx" export Ali_Secret="xxxxxxxx" acme.sh --issue -d 'thedf.cc' -d '*.thedf.cc' --dns dns_ali提示:阿里云账户RAM子账号需要授予“域名管理权限”和“管理云解析(DNS)的权限”
注意:如果签发证书不成功,重复执行次数最好不要超过5次以免被 CA 惩罚到第二天再试,尽可能找到不成功的问题。例如由于文件系统权限问题可能导致无法创建 CA 所需的验证目录和文件;由于 AK权限问题无法验证域名所有权等。
查看已申请证书
acme.sh --list
执行示例:
$ acme.sh --list Main_Domain KeyLength SAN_Domains CA Created Renew thedf.cc "ec-256" *.thedf.cc ZeroSSL.com 2024-11-18T04:30:49Z 2025-01-16T04:30:49Z
续订所有证书
acme.sh --renew-all
强制签发证书
/root/.acme.sh/acme.sh --renew -d thedf.cc --force
可以使用 acme.sh 将申请的证书安装到其他位置,并且执行其他命令用来重启web服务器等。
./acme.sh --install-cert -d demo.thedf.cc --key-file /etc/nginx/ssl/demo.thedf.cc.key --fullchain-file /etc/nginx/ssl/demo.thedf.cc.pem --reloadcmd "/usr/sbin/nginx -s reload"
提示:这种方式是为了解决web服务器等无权限访问证书的问题。理论上使用链接也可以。
注意证书使用 fullchain.cer,这样的证书包含了CA证书和中间证书,可以大幅度提升证书的可信任度和兼容性。
官方文档
--