通过 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