acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.
安装 acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
# 国内服务器
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com
修改默认服务
# acme.sh默认CA为ZeroSSL,通过下面命令修改为letsencrypt
acme.sh --set-default-ca --server letsencrypt
手动 dns 方式,通过添加 TXT 记录申请证书
acme.sh --issue --dns -d mydomain.com -d *.mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
# acme.sh 会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条 txt 记录即可.
acme.sh --renew -d mydomain.com -d *.mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
# 此方式每次申请证书都需要手动重新解析验证域名所有权.
使用域名解析商提供的 api 自动添加 txt 记录完成验证
# 以dnspod为例, 你需要先登录到dnspod账号, 生成你的api id和api key. 然后:
export DP_Id="api id"
export DP_Key="api key"
acme.sh --issue --dns dns_dp -d mydomain.com -d *.mydomain.com
# 证书就会自动生成了
查询证书
# 工作目录默认为: ~/.acme.sh/
# 证书文件: ~/.acme.sh/mydomain.com/mydomain.com.cer
# 证书私钥: ~/.acme.sh/mydomain.com/mydomain.com.key
# 证书文件+中间证书 ~/.acme.sh/mydomain.com/fullchain.cer
# nginx的配置ssl_certificate使用fullchain.cer
# 查看全部证书
acme.sh --list
# 查看指定域名的证书信息
acme.sh --info -d mydomain.com
参考资料: Wiki