1 前言
目前https数字证书对于一个网站来说几乎是必备的,如果你对https还不太理解,可以参考文章:HTTP与HTTPS。
https证书有免费的,也有付费的,一般付费的证书使用时间会更长,而免费的证书目前普遍最多使用3个月就会过期,一旦过期了就需要重新去申请。
这显然是一个比较繁琐的事情,但幸好有开源工具可以帮助我们自动续签免费的https证书:acme.sh。
2 acme安装
如果你的服务器可以连外网,那就可以直接运行命令安装,同时最好你的当前用户修改为root,否则后续可能会导致无法执行自动更新证书的命令:
curl https://get.acme.sh | sh -s email=my@example.com
注意这里的邮箱需要修改为你自己的。
如果你的服务器不能连外网,那就需要使用下面这几条命令从国内安装:
git clone https://gitee.com/neilpang/acme.sh.git --depth 1
cd acme.sh
./acme.sh --install -m my@example.com
同样注意需要修改为你自己的邮箱。
安装完工具后,我们就需要生成域名的https证书,我使用的是DNS验证的方式进行生成。
这里几乎包含了所有DNS服务厂商的使用方式:dnsapi。
由于我的域名在阿里云,所以这里就介绍阿里云的使用方法,实际上都差不多:从DNS厂商拿到密钥,然后用acme登录。
3 密钥申请
首先去阿里控制台创建一个身份密钥:RAM
然后选择用key访问:
接着保存好创建的key与secret,后面登录用得到,一旦离开了这个页面,就无法找回了:
最后还需要给这个账号添加管理DNS的权限:
此时我们就可以通过密钥的方式去管理DNS解析了。
4 证书自动续签更新
然后回到我们的linux服务器,使用密钥进行登录:
export Ali_Key="<key>"
export Ali_Secret="<secret>"
./acme.sh --issue --dns dns_ali -d example.com -d *.example.com
注意这里命令中的kye与secret都需要换成你自己的,域名也需要换成你自己的。
此时这个命令会开始进行一系列的验证、并为你生成好https的证书。
最后我们只需要在运行命令将证书安装好就行了,比如我使用的是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 reload"
注意这里的域名需要换为你自己的,key与cert的路径也需要换为你nginx配置文件中配的证书路径。
比如我的nginx配置文件中的证书路径为:
那么就需要将这两个路径分别填入上面的命令中。
至于最后的reloadcmd命令,就是在更新完证书后执行什么命令可以让服务重加载证书,这里执行的命令就是service nginx reload
,也就是让nginx这个服务器reload一下。
至此,我们就完成了全部的流程,后续每两个月acme就会自动申请证书、并自动更新服务器,完全不需要我们手动去操作了。