持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
一、前言
使用HTTPS协议可以在原有HTTP的基础上添加一层数据加密的模块,使用HTTPS相比HTTP有效提高了在数据传输中受到网络嗅探和中间人攻击的成本。虽然HTTPS协议会影响请求性能,但是对于许多涉及用户数据交换的场景,HTTPS的作用十分显著。目前,大部分网站也都支持使用HTTPS协议了,如果我们的搭建的网站没有配置HTTPS,那么浏览器将对用户发出警告。
但是,对于咱们这样的小团队或个人开发者来说,难以承担证书的高额费用,索性有Let's Encrypt这样免费的证书,给我们留下了一条“活路”。
免费也有免费的代价,对于Let's Encrypt来说,为了减少非法使用,其证书有效期仅三个月,如果每三个月都要进行续签,加上申请的证书数量一大,就会让人头疼。
当然也有一些“免费”的证书托管网站,但是对数量、功能进行了限制,需要使用完整功能就需要付费了。
既然我们自己拥有服务器,使用acme.sh脚本进行自动续签,相比托管平台则更加省事。
二、配置脚本
使用下述命令实现脚本的简易配置:
curl https://get.acme.sh | sh
通过该命令完成了脚本拷贝、添加别名(方便运行)、启动定时器三个任务。
完成安装后,使用source ~/bashrc或重新开命令行后,输入acme.sh -h就能看到相关帮助:
三、设置DNS API
使用DNS API申请并进行证书验证是实现自动续签最方便的方法。
首先需要从域名商那边获得DNS API的key和secret,以阿里云为例,创建一个子用户并进行获取:
然后填入即可,不同的域名商的参数名不一样,可参考:github.com/Neilpang/ac…
export Ali_Key="your_key"
export Ali_Secret="your_secret"
四、证书申请
配置完成后,就可以申请证书了,以申请一个泛域名证书为例,--dns指定域名商,通过-d参数指定需要进行申请的域名:
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
写文章的时候发现acme.sh默认证书换成了ZeroSSL,也是一个优秀的免费证书,这里提示需要注册邮箱,填写命令进行注册:
acme.sh --register-account -m my@example.com
然后再次执行申请指令,acme.sh通过我们授权的API进行了一系列申请操作(包括设置DNS的txt解析、验证、解析删除等),等待一会,相关证书就申请好了:
申请到的证书将被存于~/.acme.sh/example.com。
完成此过程后,acme.sh会自动创建一个crontab任务,自动完成续签。当然也可以强制触发更新过程,命令如下:
acme.sh --cron -f