使用 acme.sh 自动续期 DV 证书

背景

当前的互联网环境下,为我们的站点部署一个 ssl 证书,通常有以下几点原因:

  1. 在一定程度上保证数据传输的安全(注意,并不能保证用户信息不被泄露);

  2. 现在主流浏览器对于没有部署证书的域名会显示一个“不安全”的标识,即便你网站做的再尽善尽美,没有证书照样给你打上这个 title,非常的扎眼;

  3. 再有就是当我们的站点需要对接一些开放平台的接口时,绝大部分平台都要求接入方的地址是 https 站点。

在以前,我们申请证书的操作通常都是手动完成,通常的步骤是

  1. 先去证书颁发机构的代理站点申请证书,需要提供域名信息

  2. 根据代理机构提供的解析内容,一般是 cname 或者 txt 类型,到域名解析机构新增对应的解析

  3. 验证通过后,下载我们需要证书类型,包括 nginx,apache,iis 等

  4. 将证书部署到 web 站点

虽然流程也是比较简单,但还是需要手动修改一些东西,对应到实际的公司环境,很可能还涉及到一些非技术层面的沟通工作,导致证书的部署流程并没有我们想想的那般顺畅。

为了解决这个问题,或者说为了在一定程度上缓解这个问题,一般有以下几种做法

  1. 购买多年份付费证书

  2. 绑定某一大厂云平台,流水线式部署

  3. 利用 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 为例。

apt-get update
apt-get install -y nginx

安装完成后,检测安装效果

安装 acme.sh

curl https://get.acme.sh | sh -s email=your@email.com

安装完成后,页面会有相应提示,如果系统没有安装 socat,控制台上会提示安装 socat,具体原因控制台上也有输出。

这里因为我的云服务器上已经安装过了,为了再次展示这个安装提示,我在本地的 subsystem 上又安装了一下,打印了这个输出。

颁发证书

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。所以我们最好从 letsencrypt 的直属证书颁发机构去申请证书,我这里使用的是 freessl(传送门:https://freessl.cn/

这里也可以用其他平台,只要支持自动续期的服务就都可以,这里有个小伙伴用的阿里云的方案

配置解析

登录完成后,进入【ACME 自动化】界面,添加域名,根据提示一步步完成操作,注意这里的配置 cname 解析需要到自己的域名服务商那里去配置;

安装脚本

dvc 验证通过后,freessl 会自动生成 acme.sh 的部署脚本,直接复制该脚本到目标服务器执行即可。

到这里,我们就可以拷贝这条命令,回到云服务器的控制台,部署安装了

注意,这里安装的时候,可能会出现一些 504 之类的错误(如下图👇),如果不是环境安装失败的话,一般就是网络问题,多试几次就可以了。

安装成功后,acme.sh 脚本可以设置成自动升级的模式

acme.sh --upgrade --auto-upgrade

配置 nginx

安装成功后,控制台会打印出证书文件的存放路径,然后就可以部署到 nginx 了

acme.sh --install-cert -d example.com \
--key-file       /{控制台打印出来的实际路径}  \
--fullchain-file /{控制台打印出来的实际路径} \
--reloadcmd     "service nginx force-reload"

执行截图如下

这里注意,我们只是生成了适用于 nginx 的 dv 证书文件,要完整最后的 https 配置,还是要自己修改 nginx 的配置文件的。

server {
        listen  443 ssl http2;
        listen  [::]:443 ssl http2;
        server_name     www.tonydf.cn;
        root    /usr/share/nginx/html;

        ssl_certificate         "{上面控制台提示fucallchain文件的地址}";
        ssl_certificate_key     "{上面控制台提示key文件的地址,}";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout     10m;
        ssl_ciphers     HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
}

好了,至此,我们的配置工作就基本完成了,验证一下成果

总结

至此,acme 配置自动办法证书的工作就完成了,关于 acme.sh 的更多用法,可以参考其官方仓库,传送门👉:https://github.com/acmesh-official/acme.sh

PS:本文同步发表于InfoQ: 使用acme.sh自动续期DV证书_SSL证书_为自己带盐_InfoQ写作社区

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为自己_带盐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值