文章

🛜 使用 acme.sh 自动生成免费 SSL 证书

使用 acme.sh 自动生成和安装免费 SSL 证书

acme.sh 是一个实现了 ACME 协议的脚本工具,可以通过 Let’s Encrypt 免费生成 SSL 证书。本文介绍如何使用 acme.sh 安装证书。


主要步骤:

  1. 安装 acme.sh
  2. 生成证书
  3. 安装证书到 Nginx、Apache 或其他服务

1. 安装 acme.sh

安装非常简单,只需运行以下命令即可:

注意:将 email 替换为你自己的邮箱

1
curl https://get.acme.sh | sh -s email=[email protected]

若网络不佳,可以使用代理安装:

1
curl https://get.acme.sh | sed 's/github.com/mirror.ghproxy.com\/https:\/\/github.com/g' | sed 's/raw.githubusercontent.com/mirror.ghproxy.com\/https:\/\/raw.githubusercontent.com/g' | sh -s email=[email protected]

2. 生成证书

2.1 手动 DNS 验证方式

手动在 DNS 中添加 TXT 记录进行域名所有权验证,不需要服务器或公网 IP。

1
acme.sh --issue --dns -d mangzhexuexi.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

根据 acme.sh 提示,在域名管理面板中添加相应的 TXT 记录。然后使用以下命令重新生成证书:

1
acme.sh --renew -d mangzhexuexi.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

2.2 使用 API 自动验证

如果使用 DNS 提供商的 API,acme.sh 可以自动管理 TXT 记录。例如使用 DNSPod 的 API:

  1. 登录 DNSPod 账号 并生成 API IDAPI Key
  2. 配置环境变量并生成证书:
1
2
3
4
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

acme.sh --issue --dns dns_dp -d mangzhexuexi.com

此后,证书生成过程可以自动化:

1
acme.sh --issue -d mydomain2.com --dns dns_dp

更多 DNS API 详细用法


3. 安装证书

生成证书后,需要将证书安装到 Nginx 或 Apache 等服务中。使用 --install-cert 命令将证书复制到合适的位置:

1
2
3
4
acme.sh --install-cert -d mangzhexuexi.com \
--key-file       /etc/nginx/mangzhexuexi.com.key  \
--fullchain-file /etc/nginx/mangzhexuexi.com.cert \
--reloadcmd     "sudo systemctl restart nginx"

默认情况下,acme.sh 将证书存放在 ~/.acme.sh/ 目录下,不要直接使用该目录下的文件。

详细参数请参考 acme.sh 文档


4. 参考资料

本文由作者按照 CC BY 4.0 进行授权