Skip to content

使用acme.sh申请免费通配符证书

Published:

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