SSL 证书维护

最近各大云厂商都将免费 SSL 证书调整为三个月有效期,社区有很多小伙伴发表了很多相关文章,或者提供相关的产品,今天来讲一下我应用了一年多的方案。

GitHub Actions 借助 acme.sh 结合阿里云 DNS 生成多域名的通配符证书

上面是很久之前放出来的脚本,我们用 GitHub Actions “免费服务器” 去申请,因为不管是 Let’s EncryptZeroSSL ,它们的服务器都是在国外的,为了提高签发确认速度,我们最好也是在国外服务器去进行,另外选择 ZeroSSL 也是多轮测试下来,它比 Let’s Encrypt 更稳定,签发速度也更快,还没有流控限制。

文章还隐藏了一些内容,证书签发完成后,我们会通过 阿里云CLI 上传到 数字证书管理服务。我还准备了一个 API 接口,按照一定规则从数字证书管理服务中读取最新的 SSL 证书,接着对阿里云、腾讯云、华为云等云平台,对使用到涉及 SSL 证书的云产品进行更新,比如 CDN、函数计算 等。

好了,按照上面通过 API 方式我们可以完成一半以上 SSL 证书的更新,最麻烦还是部署在自有服务器上的程序,恰好我之前借助对象存储搞了一个文件读取接口,通过 URL 就可以直接下载到文件了,在 API 中,我们加一步,把证书内容也上传到对象存储中。

服务器为了支持多个应用,我们需要把 nginx 作为前置,然后通过反向代理,把请求转发到后端服务。需要在 nginx 的 Dockerfile 中通过 URL 下载到 SSL 证书,同时让 nginx 容器实现一个月或者两个月自动编译部署更新一次,就可以完成这块的自动化了。

我们还使用 Gin SSL 失效时间全量检测,工作日每天早上十点,通过阿里云 DNS 的解析记录,来检测 SSL 证书是否过期,这块信息还会通过飞书进行发送,让我们及时了解到 SSL 证书过期的情况。

一些客户我没有 DNS 的解析记录权限,这时自研的 HTTP 拨测系统就派上用场了,对单域名的 SSL 证书检测进行了支持,临近过期会通过飞书进行通知。

往上