安装Acme.sh
curl https://get.acme.sh -s | sh -s
验证安装版本
bash ~/.acme.sh/acme.sh -v
https://github.com/acmesh-official/acme.sh
v3.0.6
更新
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新,因此 acme.sh 也需要经常更新以保持同步。
升级 acme.sh 到最新版:
bash ~/.acme.sh/acme.sh --upgrade
自动更新
bash ~/.acme.sh/acme.sh --upgrade --auto-upgrade
之后, acme.sh 就会自动保持更新了
你也可以随时关闭自动更新:
bash ~/.acme.sh/acme.sh --upgrade --auto-upgrade 0
注册设备
Let’s Encrypt
bash ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
ZeroSSL
bash ~/.acme.sh/acme.sh --set-default-ca --server zerossl
bash ~/.acme.sh/acme.sh --register-account -m 你的邮箱 --server zerossl
Buypass (支持180天)
bash ~/.acme.sh/acme.sh --set-default-ca --server buypass
bash ~/.acme.sh/acme.sh --server https://api.buypass.com/acme/directory \
--register-account --accountemail 你的邮箱
HiCA (申请时需要手动指定参数 -k 2048
才能申请免费的)(支持180天)
官方已关停
bash ~/.acme.sh/acme.sh --set-default-ca --server https://acme.hi.cn/directory
bash ~/.acme.sh/acme.sh --register-account --accountemail \
你的邮箱 \
--server http://acme.hi.cn/directory
Google (需要申请谷歌EAB 密钥 ID 和 HMAC)
申请教程移步 获取谷歌的公共证书颁发机构 API
bash ~/.acme.sh/acme.sh --set-default-ca --server google
bash ~/.acme.sh/acme.sh --register-account -m myemail@example.com --server google \
--eab-kid xxxxxxx \
--eab-hmac-key xxxxxxx
SSL.com (也需要EAB 密钥 ID 和 HMAC)
https://github.com/acmesh-official/acme.sh/wiki/SSL.com-CA
获取方法:https://www.ssl.com/guide/ssl-tls-certificate-issuance-and-revocation-with-acme/#ftoc-heading-2
这家我用HTTP方式的方式一直申请失败提示CAA解析记录问题,后面用自动DNS方式能申请成功
bash ~/.acme.sh/acme.sh --set-default-ca --server sslcom
bash ~/.acme.sh/acme.sh --register-account --server ssl.com \
-m my@example.com \
--eab-kid xxxxxx --eab-hmac-key xxxxxxxx
申请方式
手动DNS方式申请
bash ~/.acme.sh/acme.sh --issue --dns --domain 你的域名 --yes-I-know-dns-manual-mode-enough-go-ahead-please
执行后会出现下面信息,到域名解析平台去添加对应的TXT记录
...
[Sat 03 Jun 2023 12:28:09 AM EDT] Add the following TXT record:
[Sat 03 Jun 2023 12:28:09 AM EDT] Domain: '_acme-challenge.你的域名'
[Sat 03 Jun 2023 12:28:09 AM EDT] TXT value: 'rozal8uFwfbtfoLSfRih559CPbNkCUFRGWMVsBhj96E'
...
添加后可以使用本地电脑执行下面这条命令,验证是否生效。
nslookup -qt=txt _acme-challenge.你的域名
生效后执行下面命令申请证书,多个 --renew
参数
bash ~/.acme.sh/acme.sh --issue --dns --domain 你的域名 --yes-I-know-dns-manual-mode-enough-go-ahead-please --renew
自动DNS方式申请
需要 DNS API 移步教程,我用的是cloudflare
https://www1.hi.cn/docs/tutorial-expert/challenge/dns-challenge/dns_cf.sh
https://github.com/acmesh-official/acme.sh/wiki/dnsapi#1-use-cloudflare-domain-api-to-automatically-issue-cert%E3%80%82%F0%9F%98%8E
建议是使用CF_Token
CF_Key需要 Global API Key 权限太高了
export CF_Token="xxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxx"
export CF_Zone_ID="xxxxxxxxxxxx"
可以将这些环境变量写 account.conf 文件
vim ~/.acme.sh/account.conf
CF_Token="xxxxxxxxxxxx"
CF_Account_ID="xxxxxxxxxxxxx"
CF_Zone_ID="xxxxxxxxxxxx"
自动DNS申请命令
bash ~/.acme.sh/acme.sh --issue --dns dns_cf --domain 你的域名
同时支持 www 域名
如果你想要证书同时支持www子域名和顶级域名,你需要在你的命令中添加一个额外的--domain
参数,比如--domain www.example.com
。因此,你应该将你的命令更改为:
bash ~/.acme.sh/acme.sh --issue --dns dns_cf --domain example.com --domain www.example.com
HTTP申请方式
域名需要先解析到服务器IP
--standalone
参数是ACME客户端的一个选项,用于在单独的Web服务器上运行ACME验证。它是一种申请Let's Encrypt证书的HTTP验证方式,通过在ACME客户端内部启动一个临时的Web服务器,来提供验证所需的HTTP服务
当使用--standalone
参数时,ACME客户端会在申请证书之前启动一个临时的Web服务器,该Web服务器会监听80端口(或通过使用--httpport
参数指定的端口)并提供HTTP服务。Let's Encrypt服务器会向该Web服务器发送HTTP验证请求,以验证申请证书的域名所有权
默认使用80端口
bash ~/.acme.sh/acme.sh --issue -d 你的域名 --standalone
自定义端口
bash ~/.acme.sh/acme.sh --issue -d 你的域名 --standalone --httpport 端口
Webroot 模式
如果服务器有 Web 服务运行,改为使用 Webroot 模式 进行验证:
bash ~/.acme.sh/acme.sh --issue --domain 你的域名 -w /your/webroot/path
将 /your/webroot/path
替换为 你的域名
对应的根目录。acme.sh 会将验证文件放在 .well-known/acme-challenge/
目录下,供 Let's Encrypt 访问。
证书安装
创建证书安装目录
mkdir /ssl
安装证书
bash ~/.acme.sh/acme.sh --installcert -d 你的域名 --fullchainpath /ssl/xxx.crt --keypath /ssl/xxx.key
参考文章
https://github.com/acmesh-official/acme.sh/wiki
https://www1.hi.cn/docs/intro
手动使用Acme.sh证书脚本申请SSL证书 | MisakaNo の 小破站