acme.sh 与 Letsencrypt
acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。
我将分享我个人使用 acme.sh 的 DNS API 模式生成通配符证书并安装至 Nginx 的全过程。
安装 acme.sh
1 | curl https://get.acme.sh | sh |
安装脚本会自动设置 alias 方便使用。
zsh 用户也许可能大概需要手动设置 alias。
1 | # 直接编辑 ~/.zshrc,或者其他方法 |
生成 letsencrypt 证书
强烈建议使用 DNS API 模式,支持列表详见 此处。
我使用的是 cloudflare 的 DNS 服务,其他 DNS 提供商是否支持以及操作方式自行参考上面的两个链接,基本上主流 DNS 全部支持 API。
不支持的话考虑更换 DNS 吧,cloudflare 就是很好的选择。
获取 API Key
- 访问 cloudflare 面板。
- 点击 API Keys 选项卡内 Global API Key 选项的 View 按钮取得 API key。
1 | export CF_Key="你的 cloudflare Global API Key" |
制作证书
我这里选择了 384 位 通配符 ECC 证书并开启 OCSP Must-Staple。也可以选择 256 位即使用 ec-256 参数,更多参数说明点击 这里 及 Options and Params 查看。
1 | acme.sh --issue --dns dns_cf -d your.domain -d '*.your.domain' -k ec-384 --ocsp |
安装证书到 Nginx
这一步并不是必须,你可以手动复制或者直接引用原始证书地址,确保安全即可。
acme.sh 内置 --installcert 命令,使用说明 在此。这里假设你的 Nginx ssl 配置证书的路径为 /path/to/ecc,那么命令如下。
1 | mkdir -p /path/to/ecc |
证书签发的限制
不要在短时间内高频率地签发证书,letsencrypt 是有着严格限制的。
感兴趣可以访问 官方声明了解详情。