使用Acme.sh申请配置证书

目录

ACME. SH 申请证书并使用 DNS-01 认证

默认 CA 是 ZeroSSL,如果想用 Let’s Encrypt 需要显示指定 --server letsencrypt 。似乎是 letsencrypt 申请证书比 zerossl 快一些。但是 letsencrypt 多次申请失败会限制 24 小时。 letsencrypt偏向开源免费,而zerossl偏商业。所以我还是选择letsencrypt。

  • 安装:–install
  • 选 CA:–set-default-ca
  • 签发:–issue
  • 部署到服务:–install-cert
  • 续期:–renew
  • 查看:–list

官方说明不建议使用 sudo 提权,而是全程使用一个用户。

下载 ACME. SH

1
curl https://get.acme.sh | sh -s email=you@example.com

申请证书

HTTP-01 和 DNS-01 质询的区别是:

  • HTTP-01 需要开放 80 端口完成验证,也就是在/. Well-known/acme-challenge/<token>,然后证书签发机构再去抓取完成验证。
  • DNS-01 则是在 _acme-challenge.你的域名 下面添加一条 TXT 记录完成验证。适合不开放 80 端口的情况。

HTTP-01

如果已经搭建起网站:

1
~/.acme.sh/acme.sh --issue -d example.com -w /var/www/html --server letsencrypt

如果没有搭建起网站,就要临时启动一个 HTTP 服务占用 80 端口完成验证

1
~/.acme.sh/acme.sh --issue --standalone -d example.com --server letsencrypt --standalone

DNS-01:

1
2
3
export CF_Token="你的token"
export CF_Account_ID="你的account_id"
~/.acme.sh/acme.sh --issue --dns dns_cf -d example.com -d '*.example.com' --server letsencrypt

Cloudflare_token 需要创建令牌拿到 /images/remote/20260325204425725_16896800060764089224.webp

Cloudflare_account_id 点进域名,右侧下滑可以看到。

手动 DNS 模式

如果域名托管商不提供 API,就需要手动在域名管理后台处添加 TXT 记录,完成后可以删除。

1
~/.acme.sh/acme.sh --issue --dns -d example.com --server letsencrypt
1
~/.acme.sh/acme.sh --renew -d example.com

安装证书

手动 cp 到服务目录的那份不会自动同步,也不会自动 reload 服务。需要用以下命令执行安装。

1
2
3
4
~/.acme.sh/acme.sh --install-cert -d dp.example.com --ecc \
--key-file /var/lib/derper/certs/dp.example.com.key \
--fullchain-file /var/lib/derper/certs/dp.example.com.crt \
--reloadcmd "systemctl restart derper"

参考

  1. README: https://github.com/acmesh-official/acme.sh
  2. 安装: https://github.com/acmesh-official/acme.sh/wiki/How-to-install
  3. DNS API: https://github.com/acmesh-official/acme.sh/wiki/dnsapi
  4. CA 选择: https://github.com/acmesh-official/acme.sh/wiki/Server
  5. sudo 说明: https://github.com/acmesh-official/acme.sh/wiki/sudo