想要使用免费的HTTPS证书,但是又觉得三个月的有效期太短,那么我想你需要的是一款可以自动部署、更新HTTPS证书的工具——acme.sh。
什么是acme.sh
acme.sh 实现了 acme 协议, 不仅可以从 zerossl或者letsencrypt 自动生成免费的证书,还支持自动更新快过期的证书。
总之就是主打一个免费还方便,让你轻松实现HTTPS证书自由。
安装acme.sh
只需要一行命令即可:
curl https://get.acme.sh | sh -s email=my@qq.com
注意替换成自己的邮箱
设置默认证书
acme.sh脚本默认ca服务器是zerossl,经常出错,会导致获取证书的时候一直出现:Pending, The CA is processing your order, please just wait。
只需要把ca服务器改成letsencrypt 即可,虽然更改以后还是有概率出现pending,但基本2-3次即可成功。
acme.sh --set-default-ca --server letsencrypt
生成证书
acme.sh 实现了 acme 协议支持的所有验证协议。 一般有两种方式验证: http 和 dns 验证。
本文以dns验证方式为例。
假设你的域名是在阿里云上,则需要在阿里云创建一个RAM账号(https://ram.console.aliyun.com/users),并获取到AccessKey ID
和AccessKey
。注意需要给该账号赋予管理DNS的权限,否则无法实现自动申请、更换证书。
然后就可以使用命令生成证书啦
# 只需要配置一次
export Ali_Key="<AccessKey ID>"
export Ali_Secret="<AccessKey>"
./acme.sh --issue --dns dns_ali -d *.xi-n.com
如果成功后则显示如图
此时,证书就会自动生成了。 这里配置的Ali_Key
和Ali_Secret
会被自动记录下来, 后续再增加新域名的时候就不需要再次配置了,直接生成就好了:
acme.sh --issue -d *.meetcoding.cn --dns dns_ali
acme.sh已经集成了所有主流的dnsapi,不管是用阿里云做域名解析还是用腾讯云等,都是通过上述类似的步骤完成配置。
安装证书
使用--install-cert
命令,并指定目标位置,然后证书文件会被copy到相应的位置。 以Nginx配置为例:
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"
安装路径可以根据需求修改地址,同时在Nginx的配置中也需要配置对应路径
ssl_certificate_key "/path/to/keyfile/in/nginx/key.pem";
ssl_certificate "/path/to/fullchain/nginx/cert.pem";
查看已经申请的证书
acme.sh --list
更新证书
更新证书都是自动完成的,无需我们手动再管理。查看自动更新的任务
crontab -l
由此我们可以知道,所谓的自动更新就是配置了一个定时任务,该任务会自动检测证书是不是快过期,如果快过期了就会自动把上述过程执行一遍,从而实现自动更新。
进阶
acme.sh提供了丰富的配置项以便满足用户多种多样的使用场景。如果你也想要尝试使用acme.sh,期望你在配置过程中可以多参考文档。您可以关注公众号:遇码,回复https获取文档。