半夜收到邮件通知,之前签发的博客站点 SSL 证书到期了。通过 KeyManager 申请亚洲诚信证书,发现 KM 已经不支持这一产品,遂又动了搞自动签发的念头。于是通过 FreeSSL.cn 自动签发。
(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
安装脚本会给当前 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 提供了不同的证书安装参数。以下为 Apache
和 Nginx
的安装命令,对应只需要替换签发下来的证书文件路径即可。最后一行是写入证书后调用 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自动签发证书失败问题至此解决!希望这个小发现可以帮助到您!