原理
某些网站可以提供三个月的通配符SSL证书,没有申请次数限制
acme可以你的通过DNS服务商,定期自动用你的域名向这些网站申请通配符ssl证书,从而实现永久通配符ssl证书的效果
安装acme
curl https://get.acme.sh | sh
会安装到家目录的/.acme.sh文件夹下,进入这个目录,里面有可执行文件acme.sh
生成SSL证书
要实现acme定期申请证书,首先要授权它操作你的域名,需要将DNS服务商的API密钥提供给它
以腾讯云为例,腾讯云的DNS服务商是DNSPOD CN,前往控制台创建密钥
注意是DNSPod Token,不是腾讯云API密钥
默认是没有密钥的,创建一个密钥即可
然后输入
export DP_Id="密钥的ID"
export DP_Key="密钥的Token"
此时acme就用了你域名的权限,可以申请SSL证书了
假如你的域名是baidu.com
./acme.sh --issue --dns dns_dp -d baidu.com -d *.baidu.com
第一个baidu.com是固定的,表示主域名,第二个*.baidu.com表示你申请的证书适用于所有baidu.com的泛域名
--dns是指定DNS服务商,dns_dp对应DNSPOD CN,他会读取你之前设置的DP_Id和DP_Key。如果申请成功,你的DP_Id和DP_Key会被保存,下次不需要再输入
导出证书
申请以后的证书位于.acme.sh文件夹里,但不要直接使用,需要导出
以nginx为例
./acme.sh --installcert -d baidu.com \
--keypath /etc/nginx/ssl/example.com.key \
--fullchainpath /etc/nginx/ssl/example.com.cer
--reloadcmd "nginx -s reload"
-d baidu.com表示导出申请的baidu.com的证书
--keypath和--fullchainpath表示导出.key文件和.cer到那
--reloadcmd表示重启nginx的指令,如果你是docker那就差不多是docker restart nginx
这样当证书需要更新时,acme会自动更新.key和.cer,然后重启nginx,再也不需要你操心证书了
通过
可以看到acme每三个月自动更新一次证书crontab -l
自动更新acme
可以看出来acme类似爬虫,爬取提供泛域名证书的网站,因此最好开启acme的自动更新防止接口变化
./acme.sh --upgrade --auto-upgrade
其它DNS服务商
acme可以使用多家DNS服务商,具体见/.acme.sh/dns_api
例如你域名的DNS服务商是cloudflare,那么就去看dns_cf.sh,里面说你应该提供CF_Key、CF_Email、CF_Token、CF_Account_ID、CF_Zone_ID
使用export设置好这些值后就可以指定用dns_cf申请证书
./acme.sh --issue --dns dns_cf -d baidu.com -d *.baidu.com