利用 FreeSSL ACME v2 自动化签发 SSL 证书

@xianhao  August 20, 2023

半夜收到邮件通知,之前签发的博客站点 SSL 证书到期了。通过 KeyManager 申请亚洲诚信证书,发现 KM 已经不支持这一产品,遂又动了搞自动签发的念头。于是通过 FreeSSL.cn 自动签发。

利用 FreeSSL ACME v2 自动化签发 SSL 证书

(FreeSSL.cn ) 是一个免费提供 HTTPS 证书申请、HTTPS 证书管理和 HTTPS 证书到期提醒服务的网站,旨在推进 HTTPS 证书的普及与应用,简化证书申请的流程。通过注册 FreeSSL.cn 账号,可以对申请的证书进行保存和在线管理。

添加 FreeSSL ACME域名

因为平时会用到二级域名做测试,所以干脆对 *.ixianhao.com 进行证书签发。创建证书时使用 *.ixianhao.com
输入要创建证书的域名

输入要创建证书的域名

界面跳转到控制台,此处点击下一步即可。

控制台
配置 ACME 域名

配置域名 DNS 解析

一开始,会让你对持有域名进行 DNS验证,首先根据 提示 DCV 配置提示配置一下 DNS

  • 主机记录:_acme-challenge
  • 记录类型:CNAME
  • 记录值:ncghshkhkhuigkzxxe.dcv2.httpsauto.com
跟以前手动配置不一样,此处自动签发用了 CNAME 而不是 TXT 记录,配置的时候要留意

解析记录

提示配置 DCV

域名托管在阿里云上,配置 DNS 的过程轻车熟路,生效速度也很快。上面的图是配置完成验证后的结果,如果没验证成功,需要等个 5-10 分钟等待 DNS 解析生效。

域名解析

在阿里云上配置 DNS

DNS 验证通过后就可以开始签发 SSL了。通过验证后会得到以下的界面,但实际上不需要等待 DCV 验证通过,也可以直接点击「完成」,通过页面「证书申请」按钮,选择添加域名后同样可以得到 acme.sh 的部署命令提示。

截图中应该是 FreeSSL.cn 的 Bug,我使用了泛域名,提示的命令对 * 并没有做转义,会导致后续执行失败,下文会提到。

解析验证

acme.sh 部署命令

安装 acme.sh

推荐阅读 ACME v2证书自动化快速入门 一文。当然,相关文中的操作也可以参考下方:

先来安装个 acme.sh 客户端,命令中的 email 可以替换为你自己的邮箱地址(虽然我还没搞懂有什么用,应该是后续发送通知邮件的吧)。

我是直接在 root 下操作的,非 root 用户可能安装后会有些问题,建议用 sudo su 切换至 root 用户操作。

如果上面官方下载地址失败 或者 太慢,可以选用国内的备用地址

安装 acme.sh

安装 acme.sh

安装脚本会给当前 Shell 添加 alias 别名,安装完成后需要 omz reload 重载下 Shell,如果不是用 oh-my-zsh 的自行百度或退出当前用户重新登陆一次就好。

请求签发 SSL证书

根据上文的部署命令,执行 acme.sh --issue 请求签发会得到 zsh: no matches found: *.normalcoder.com 的错误提示,这是因为 FreeSSL.cn 提示的命令对泛域名的 * 符号没有做转移处理。

命令中的 https://acme.freessl.cn/v2/DV90/directory/******************** 是 FreeSSL的专属 ACME地址, 专属 ACME地址需要注意保密 ,这非常重要。此处做了脱敏,可以根据自己情况替换。

中间可能会有多次等待签发订单,脚本会自动重试,完成后会把签发证书内容和文件位置打印出来,当看到 Cert success 时证书就已经签发并下载到本地了。

签发成功

请求签发SSL

安装证书到 Web 服务器

acme.sh 针对不同的 Web Server 提供了不同的证书安装参数。以下为 ApacheNginx 的安装命令,对应只需要替换签发下来的证书文件路径即可。最后一行是写入证书后调用 service 重启对应服务,无需改动。

因为我用的 Nginx,于是执行结果如下,有关 Nginx 如何配置网站 SSL可参考 Nginx 如何配置证书?

安装证书到 Nginx

安装证书

acme.sh --install-cert -d niupi.com \
--key-file       /var/www/certificate/niupi.com.key  \
--fullchain-file /var/www/certificate/niupi.com.pem \
--reloadcmd     "service nginx force-reload"

至此,利用 FreeSSL ACME v2自动化签发 SSL 证书完成。

写在最后

最近新购买了几个域名在使用FreeSSL ACME v2 自动化签发 SSL 证书时发现老是失败。
FreeSSL自动签发证书失败

经过几天的研究,包含更换注册账号等操作。一概无法解决。最后在跑命令的同时,在腾讯云申请了免费的一年证书后,居然神奇的可以了。原来只需要找一个网站申请一个亚洲诚信的免费证书,即可自动化签发。

FreeSSL自动签发证书失败问题至此解决!希望这个小发现可以帮助到您!


添加新评论