Skip to content

想要使用免费的HTTPS证书,但是又觉得三个月的有效期太短,那么我想你需要的是一款可以自动部署、更新HTTPS证书的工具——acme.sh。

什么是acme.sh

acme.sh 实现了 acme 协议, 不仅可以从 zerossl或者letsencrypt 自动生成免费的证书,还支持自动更新快过期的证书。

总之就是主打一个免费还方便,让你轻松实现HTTPS证书自由。

安装acme.sh

只需要一行命令即可:

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次即可成功。

sh
acme.sh --set-default-ca --server letsencrypt

生成证书

acme.sh 实现了 acme 协议支持的所有验证协议。 一般有两种方式验证: http 和 dns 验证。

本文以dns验证方式为例。

假设你的域名是在阿里云上,则需要在阿里云创建一个RAM账号(https://ram.console.aliyun.com/users),并获取到AccessKey IDAccessKey。注意需要给该账号赋予管理DNS的权限,否则无法实现自动申请、更换证书。

然后就可以使用命令生成证书啦

sh
# 只需要配置一次
export Ali_Key="<AccessKey ID>"
export Ali_Secret="<AccessKey>"

./acme.sh --issue --dns dns_ali -d *.xi-n.com

如果成功后则显示如图

此时,证书就会自动生成了。 这里配置的Ali_KeyAli_Secret会被自动记录下来, 后续再增加新域名的时候就不需要再次配置了,直接生成就好了:

sh
acme.sh --issue -d *.meetcoding.cn --dns dns_ali

acme.sh已经集成了所有主流的dnsapi,不管是用阿里云做域名解析还是用腾讯云等,都是通过上述类似的步骤完成配置。

安装证书

使用--install-cert命令,并指定目标位置,然后证书文件会被copy到相应的位置。 以Nginx配置为例:

sh
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";

查看已经申请的证书

sh
acme.sh --list

更新证书

更新证书都是自动完成的,无需我们手动再管理。查看自动更新的任务

crontab -l

由此我们可以知道,所谓的自动更新就是配置了一个定时任务,该任务会自动检测证书是不是快过期,如果快过期了就会自动把上述过程执行一遍,从而实现自动更新。

进阶

acme.sh提供了丰富的配置项以便满足用户多种多样的使用场景。如果你也想要尝试使用acme.sh,期望你在配置过程中可以多参考文档。您可以关注公众号:遇码,回复https获取文档。

遇码MeetCoding 开源技术社区