写点什么

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

作者:为自己带盐
  • 2023-12-13
    河北
  • 本文字数:2268 字

    阅读完需:约 7 分钟

使用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 updateapt-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


发布于: 刚刚阅读数: 7
用户头像

学着写代码 2019-04-11 加入

是一枚,热爱技术,天赋不高,又有点轴,的猿。。

评论

发布
暂无评论
使用acme.sh自动续期DV证书_SSL证书_为自己带盐_InfoQ写作社区