七牛云域名证书自动续期的实现方案

更新日期: 2026-01-01 阅读次数: 11 字数: 554 分类: CDN

Golang 实现

https://github.com/AlbinZhang/qiniu-cert-updater

这个没有完全自动化,因为我没有找到自动下载证书的方法。

Let’s Encrypt 证书如何获取

我只在服务器上部署过 Certbot 工具来获取 Let’s Encrypt 证书,并且自动部署 Nginx。 如果只是下载证书,还得查一下如何实现。即 Let’s Encrypt 证书如何下载,但是不要部署到 nginx 之类的,我只想获取到证书文件。

sudo certbot certonly --manual --preferred-challenges=dns -d example.com

参数说明:

  • manual: 启用手动交互模式。
  • preferred-challenges=dns: 指定使用DNS验证方式。
  • d: 指定域名

证书文件在哪里

/etc/letsencrypt/live/

自动续期

这个基于 DNS 的方案,看起来不太方便实现。因为我不想在服务器上通过 API 操作 DNS 解析记录。 这个风险很大。

acme.sh

https://github.com/acmesh-official/acme.sh

另一个帖子推荐使用 acme.sh 来获取证书:

https://linux.do/t/topic/609809

完全靠 golang 实现

https://czyt.tech/post/how-to-get-free-lets-encrypt-ssl-for-qiniu-bucket-domain

这篇是最靠谱的,连证书获取都使用了 golang 实现,完全不依赖外部工具。 原理也说明的非常明白。

不要着急,先把原理看明白了再说。

HTTP-01 验证 这是当今最常见的验证方式。 Let’s Encrypt 向您的 ACME 客户端提供一个令牌,然后您的 ACME 客户端将在您对 Web 服务器的 http://<你的域名>/.well-known/acme-challenge/(用提供的令牌替换 )路径上放置指定文件。 我们的 HTTP-01 验证最多接受 10 次重定向。 我们只接受目标为“http:”或“https:”且端口为 80 或 443 的重定向。

请注意,将完整的 DNS API 凭据放在 Web 服务器上会显着增加该服务器被黑客攻击造成的影响。 最佳做法是使用权限范围受限的 API 凭据,或在单独的服务器上执行 DNS 验证并自动将证书复制到 Web 服务器上。

这里使用的是 HTTP-01 验证方式,即,通过七牛接口上传验证文件到指定路径,从而完成域名验证。

两个主要的 golang 依赖

"github.com/go-acme/lego/v4/certificate"
"github.com/go-acme/lego/v4/challenge/dns01"
"github.com/go-acme/lego/v4/challenge/http01"
"github.com/go-acme/lego/v4/lego"
"github.com/go-acme/lego/v4/registration"
"github.com/qiniu/go-sdk/v7/auth/qbox"
"github.com/qiniu/go-sdk/v7/storage"

具体实现,改天有空用 AI 实现一版吧。

关于作者 🌱

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式