使用 acme.sh 申请免费SSL证书
0. 什么是 acme.sh?
ACME 是 “Automatic Certificate Management Environment”(自动证书管理环境)的缩写。这是一个由 IETF 提出的标准,用于自动化证书颁发和更新过程。而 acme.sh 是一个遵循 ACME 协议的客户端工具,可以用于申请、更新、部署证书。同时,他也会使用 crontab 定时更新证书。
acme.sh 的官网是 acme.sh。
acme.sh 支持通过 网站验证与 DNS 验证两种主流方式。本文主要介绍如何通过 DNS 验证 的方式申请证书。
acme.sh 支持的 DNS 服务商可以在这个链接查看。
1. 安装 acme.sh
使用以下命令安装 acme.sh,记得将 email=my@example.com 替换为你的邮箱地址。
1 | |
或
1 | |
2. 获得 DNS API Key/Secret
在申请证书之前,需要先获取 DNS 服务商的 API key 或 secret。
根据这个链接的指导获得你需要的 key 等内容。
例如我们想要使用 Cloudflare 的 DNS 服务,那么我们需要在 Cloudflare 的控制台中获取 API key 和 secret。
参考文档后,我们需要获得CF_Key和CF_Email。
1 | |
3. 申请证书
由于我们刚刚选择了 Cloudflare 的 DNS 服务,所以我们需要使用 --dns dns_cf 参数。
以下命令中我们为两个域名申请了证书,一个是 example.com,另一个是 *.example.com。
1 | |
如果你需要 ecc 证书,可以使用以下命令:
1 | |
等待一段时间,且没有报错后,证书就会被生成在 ~/.acme.sh/example.com 目录下。但是,这个证书不可以进行使用,因为这个证书目录可能会因为其他问题而变化。
在成功申请后,上述输入的 API Key 和 Secret 信息会被保存。
4. 安装证书
正如上一步最后所说,我们不能直接使用 ~/.acme.sh/example.com 目录下的证书,我们需要将证书安装(导出)到我们的服务器某个路径。
可以使用以下命令进行安装:
1 | |
其中:
--cert-file代表证书文件的路径--key-file代表私钥文件的路径--fullchain-file代表证书链文件的路径--reloadcmd代表重载命令,在重新申请证书后,会执行这个命令
fullchain 与 cert 的区别是,fullchain 包含了证书链,而 cert 只包含了证书。一般情况下,我们都会使用 fullchain。因此,上述的--cert-file可以去除,即:
1 | |
5. 证书更新
acme.sh 会自动为你的证书续期,你不需要手动操作。
如果你想手动更新证书,可以使用以下命令:
1 | |