通过 acme.sh 生成 HTTPS 证书。

什么是 acme.sh?

acme.sh 是一个开源 Shell 脚本,用于自动生成和管理 HTTPS 证书。

安装

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

安装后,acme.sh 将出现在您的主目录中。

~/.acme.sh

执行以下命令使acme.sh的环境变量生效。

source ~/.basrc

生成证书

在生成证书之前,acme.sh 需要验证您对域名的所有权。验证方式有以下几种:

HTTP验证

Apache

如果您使用的是 Apache 服务器。

acme.sh --issue -d mydomain.com --apache

Nginx服务器

如果您使用的是 nginx 服务器。

acme.sh --issue -d mydomain.com --nginx

将文件添加到网站根目录。

你也可以告诉acme.sh你网站的根目录,acme.sh会自动添加一个文件进行验证。

acme.sh --issue -d mydomain.com --webroot /path-to-the-webroot-of-the-site

DNS验证

手动添加记录

执行命令

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

然后,acme.sh 会生成对应的解析记录并显示。您只需在域管理面板中添加此 TXT 记录即可。

然后重新生成证书

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

通过 DNS 服务提供商 API 进行验证。

这应该是最常用和推荐的验证方式。以CloudFlare为例,请参考https://github.com/acmesh-official/acme.sh/wiki/dnsapi 用于申请其他服务提供商的证书。

申请API。

您可以在Cloudflare个人资料页面的全局API密钥下获取您的全局API密钥。API令牌部分。单击全局 API 密钥旁边的“查看”,验证您的 Cloudflare 密码,它将显示给您。它是一个 32 个字符的十六进制字符串,您必须通过设置环境变量将其提供给 acme.shCF_Key 到它的价值。您还必须设置CF_Email 发送至与您的 Cloudflare 帐户关联的电子邮件地址;这是您登录 Cloudflare 时输入的电子邮件地址。例如:

export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4"
export CF_Email="[email protected]"

生成证书。

acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'

查看证书文件

证书生成后,您可以访问~/.acme.sh/mydomain.com_ecc查看证书文件。fullchain.cer是证书文件和mydomain.io.key 是私钥文件。它们都是文本文件,可以在站点配置过程中上传到 i18n.so。

acme.sh使用过程中的常见问题

CA

acme.sh 现在默认使用 ZeroSSL 作为 CA,但经常遇到可访问性问题。您可以使用以下命令将 CA 切换到 Let's Encrypt。

acme.sh --set-default-ca --server letsencrypt

生成通配符域证书。

假设您想申请适用于的证书example.com*.example.com,您可以使用以下命令生成通配符域证书。

acme.sh -d example.com -d *.example.com

证书续期

acme.sh生成证书后,会添加一个crontab定时任务,定期更新证书。可以使用如下命令查看定时任务,更新的内容也保存在~/.acme.sh/mydomain.com_ecc

crontab -e