使用 acme.sh 自动续期 DV 证书
背景
当前的互联网环境下,为我们的站点部署一个 ssl 证书,通常有以下几点原因:
在一定程度上保证数据传输的安全(注意,并不能保证用户信息不被泄露);
现在主流浏览器对于没有部署证书的域名会显示一个“不安全”的标识,即便你网站做的再尽善尽美,没有证书照样给你打上这个 title,非常的扎眼;
再有就是当我们的站点需要对接一些开放平台的接口时,绝大部分平台都要求接入方的地址是 https 站点。
在以前,我们申请证书的操作通常都是手动完成,通常的步骤是
先去证书颁发机构的代理站点申请证书,需要提供域名信息
根据代理机构提供的解析内容,一般是 cname 或者 txt 类型,到域名解析机构新增对应的解析
验证通过后,下载我们需要证书类型,包括 nginx,apache,iis 等
将证书部署到 web 站点
虽然流程也是比较简单,但还是需要手动修改一些东西,对应到实际的公司环境,很可能还涉及到一些非技术层面的沟通工作,导致证书的部署流程并没有我们想想的那般顺畅。
为了解决这个问题,或者说为了在一定程度上缓解这个问题,一般有以下几种做法
购买多年份付费证书
绑定某一大厂云平台,流水线式部署
利用 acme 协议,完成证书的自动续期
那两种方案也都有各自的优缺点,
第一种的缺点很明显,就是无法完全避免手动操作,只是拉长的间隔。优点就是可以根据实际需求,灵活的选择各种类型证书,dv(免费或者便宜),ov(贵),ev(特别贵,申请特别难)。
第二种的话,其实最接近零配置方案,缺点就是和大厂服务深度绑定,比如域名在阿里云申请,证书也要在阿里云买,服务器也要在阿里云。
第三种的缺点就是目前来说只支持 dv 证书,再有就是需要一点点开发成本,优点就是,如果不考虑更换证书类型,可以说是接近一劳永逸了。
有免费的 dv 证书为啥还要用收费的 ov,ev 类证书呢?
这一点有疑问的小伙伴可以搜一搜,事实上我认为 dv 证书就可以满足绝大多数场景了,即便是 Google,Redis 这类大厂的官网,用的证书,也是 dv 证书哦!但国内的好多站点,即便是小厂,有的也要上 ov 甚至 ev 证书,多少有点面子工程了~。
感兴趣的小伙伴,可以到这里查看你想查的网站用的那种证书:https://myssl.com/,我这里放一张 redis 官网的证书报告
前置条件
1、域名
首先要准备一个自己可以操作,或者很方便让别人来替你操作的域名。最好是申请一个自己的,平时测试什么的可以直接拿来用,一年也用不了多少钱,我这自己的这个,每年十几块钱。
2、服务器
最好是有一台自己的专属云服务器,原因无他,也是为了方便,毕竟在自己的服务器上乱搞也不怕搞坏了,大不了重装系统。这个成本稍微高点,但目前各大平台对新用户还是很照顾的,基本都是 100 块钱以内 1 年,到期了不行就换平台呗,这么多平台呢,轮着薅!
配置环境
本文以 debian 操作系统为例,演示通过部署 acme.sh 脚本来自动颁发并安装证书。这里我的证书颁发机构是 freessl,国内大平台
*安装 Nginx
这一步不是必须的,但我们的站点需要有一个 web 服务器,除了 nginx,也可以用 apace 等其他 web 服务,我这里以 nginx 为例。
安装完成后,检测安装效果
安装 acme.sh
安装完成后,页面会有相应提示,如果系统没有安装 socat,控制台上会提示安装 socat,具体原因控制台上也有输出。
这里因为我的云服务器上已经安装过了,为了再次展示这个安装提示,我在本地的 subsystem 上又安装了一下,打印了这个输出。
颁发证书
acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。所以我们最好从 letsencrypt 的直属证书颁发机构去申请证书,我这里使用的是 freessl(传送门:https://freessl.cn/)
这里也可以用其他平台,只要支持自动续期的服务就都可以,这里有个小伙伴用的阿里云的方案。
配置解析
登录完成后,进入【ACME 自动化】界面,添加域名,根据提示一步步完成操作,注意这里的配置 cname 解析需要到自己的域名服务商那里去配置;
安装脚本
dvc 验证通过后,freessl 会自动生成 acme.sh 的部署脚本,直接复制该脚本到目标服务器执行即可。
到这里,我们就可以拷贝这条命令,回到云服务器的控制台,部署安装了
注意,这里安装的时候,可能会出现一些 504 之类的错误(如下图👇),如果不是环境安装失败的话,一般就是网络问题,多试几次就可以了。
安装成功后,acme.sh 脚本可以设置成自动升级的模式
配置 nginx
安装成功后,控制台会打印出证书文件的存放路径,然后就可以部署到 nginx 了
执行截图如下
这里注意,我们只是生成了适用于 nginx 的 dv 证书文件,要完整最后的 https 配置,还是要自己修改 nginx 的配置文件的。
好了,至此,我们的配置工作就基本完成了,验证一下成果
总结
至此,acme 配置自动办法证书的工作就完成了,关于 acme.sh 的更多用法,可以参考其官方仓库,传送门👉:https://github.com/acmesh-official/acme.sh
版权声明: 本文为 InfoQ 作者【为自己带盐】的原创文章。
原文链接:【http://xie.infoq.cn/article/e87c899c13adbdb779e07e365】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论