acme.sh 实现了 acme
协议, 可以从 Let’s Encrypt 生成免费的证书。Let’s Encrypt自18年起宣布支持泛域名证书。
使用acme.sh生成泛域名证书,配合acme.sh的自动续期,可以极大节约管理证书的时间成本。
安装acme.sh
仅需一条命令:
1
|
curl https://get.acme.sh | sh
|
调用域名提供商的api,用以验证域名
以namesilo为例,api manager
>api key
>generate
,得到特定的api key
。
1
|
export Namesilo_Key="xxxxxxxxxxxxxxxxxxxxxxxx"
|
更多 DNS API 用法参考这里。
生成泛域名证书
1
|
acme.sh --issue --dns dns_namesilo --dnssleep 1800 -d example.com -d *.example.com
|
在zsh等shell下,命令行不识别 * 等特殊字符,会报错zsh: no matches found: *
,加引号即可解决:
1
|
acme.sh --issue --dns dns_namesilo --dnssleep 1800 -d example.com -d '*.example.com'
|
完毕会将证书路径输出到屏幕上:
1
2
3
4
|
[2020年 03月 10日 星期二 20:43:46 CST] Your cert is in /root/.acme.sh/example.com/example.com.cer
[2020年 03月 10日 星期二 20:43:46 CST] Your cert key is in /root/.acme.sh/example.com/example.com.key
[2020年 03月 10日 星期二 20:43:46 CST] The intermediate CA cert is in /root/.acme.sh/example.com/ca.cer
[2020年 03月 10日 星期二 20:43:46 CST] And the full chain certs is there: /root/.acme.sh/example.com/fullchain.cer
|
安装证书
官方不建议直接使用 .acme
目录下的文件,这里边的文件仅供项目内部使用,且在后续版本升级后,目录结构可能会发生变化。
所以需使用--install-cert
命令,将证书copy指定的使用位置,以 Nginx 为例:
1
2
3
4
|
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"
|
详细用法参考官方文档。