每 3 个月给阿里 CDN 换一次证书,我终于受不了了

olddogs 2026-07-28 15:56 1

同事突然跑过来说:"你这个图片怎么又裂了?"


我心里一沉。


又是证书过期了。


其实阿里云早就发过短信提醒。但说实话,谁会天天盯着阿里云的短信看?


免费的,也是最贵的


阿里云免费 SSL 证书,不要钱。


但三个月换一次。


换一次的流程:


登控制台 → SSL 证书页面 → 申请 → 填域名 → DNS 验证 → 等通过 → 下载 → 进 CDN 页面 → 找域名 → 选择 or 上传 → 关联 → 确认替换。


九步。每季度一次。一年四次。


从 2023 年到现在,我手动换过不晓得多少次了。


每次都要翻那个比迷宫还复杂的控制台,在"数字证书管理服务"和"CDN"之间来回跳。


这哪是免费证书。这是免费劳力券。


我不是没挣扎过


试过 acme.sh——签证书好使,但推到阿里 CDN 还得自己写脚本,还得维护。


服务器换了,脚本丢了。cron 停了,证书又过期了。


也试过阿里云自己的"托管"——半自动洗衣机,帮你转了,不帮你甩干。


既然都在做面板了


我一直在做一个开源服务器面板,GoPanel 。


有一天又收到那条该死的短信,我看着短信,又看着面板——


为什么不把证书也收了?


Let's Encrypt 签发 + DNS-01 验证 + 到期自动续签 + 自动推到阿里 CDN 。


全自动。签发、续签、推送,一条龙,人不用管。


截图为证


签注的时候,每一步都有实时日志:


GoPanel SSL 签注日志


这是签注过程中的日志界面。


从 ACME 账号注册、DNS 验证、证书下载,到最后推送到 CDN ,每一步都看得清清楚楚。


比阿里云控制台那个转圈圈强多了。


签完之后,证书列表是这样的:


GoPanel SSL 证书列表


每个证书旁边都有一个自动续签开关。


打开,就不用管了。


到期前 7 天,系统自动续签。续完自动推到 CDN 。


整个过程,你可能在睡觉,可能在写代码,可能在吃牛肉。


还可以配自动部署规则,签完直接推到阿里 CDN:


GoPanel SSL CDN 部署规则


选云账号,填目标域名,关联证书。保存之后,每次续签完自动推。


反正不用在阿里云控制台里点来点去。


技术原理


DNS-01 验证:Let's Encrypt 让你在 DNS 里放一段验证码,查到了就认你是域名主人。


为什么不用 HTTP-01:CDN 场景下域名指向阿里边缘节点,不是你的服务器,Let's Encrypt 来了也找不到你。


自动推送:签完调阿里云 CDN API ,新证书塞进去替换旧的,不用登控制台。


技术栈:Go + lego + 阿里云 SDK + cron 。没什么花哨的。


现在


现在我的证书全是 90 天自动续。


推送也是自动的。


阿里云再发短信提醒我换证书,我直接当垃圾短信处理。


偶尔打开 GoPanel 看一眼证书列表,状态都是绿的,推送都是成功的。


那种感觉,就像你终于把一件每个月都要重复做的家务,交给了洗衣机。


虽然洗衣机偶尔也会出点小问题,但至少你不用自己搓了。


关于 GoPanel


这个功能我做在了 GoPanel 里。


GoPanel 是一个开源的服务器管理面板,支持多服务器管理。


不只是证书——网站、容器、数据库、定时任务、文件管理,都能管。


如果你也被三个月一换的证书折磨过,可以试试:


👉 在线演示


👉 GoPanel GitHub


最后


这也算是一种进步吧。


至少在换证书这件事上,我终于不用再当阿里云的免费劳动力了。


如果恰好也有兄弟被同样的问题折磨,希望这能帮到你少踩一个坑。


咱长长久久。


Visits

最新回复 (43)
  • zoofy 07-28 16:04
    1
    点赞老哥,刚想做一个类似的😂
  • rekulas 07-28 16:11
    2
    阿里这个 cdn 确实有点坑,更新证书不方便,我们之前也自己实现了个自动更新
  • Javin 07-28 16:15
    3
    国内云厂商就靠这个坑钱,简直了;
  • anubu 07-28 16:18
    4
    感谢分享。
    说一个我用此类工具的痛点,关于 DNS-01 验证的权限问题。涉及到和域名解析服务商 API 交互,几乎没有工具明确说明自己需要哪些权限,如何精细化控制权限。把整个域名解析能力交给一个第三方应用是很大的风险点,没有强背书的话,很难忽略这个风险。当然,可以自己根据服务商 API 文档自行摸索出一个最小权限,但真的很繁琐,甚至你看了半天文档,然后确认 API 权限不支持,无法缩小最小权限。如果工具本身有明确的说明,或更进一步对主流服务商有一个各自的权限配置示例,体验会好很多,可以节省很多风险评估时间。
    上面只是说签发层面,全流程的话,第三方应用直接更新生产环境证书也是个风险点,各个环节都要认真评估才好。
  • mengdodo 07-28 16:19
    5
    我一直用的 AllinSSL 证书管理平台
  • xooass 07-28 16:21
    6
    腾讯云的 cdn 可以自己更新同样在腾讯云的域名的 ssl
  • kingwrcy 07-28 16:23
    7
    可以看看 certmate
  • loveqianool 07-28 16:32
    8
    acme.sh 不是这个吗?
    https://github.com/acmesh-official/acme.sh/blob/master/deploy/ali_cdn.sh
  • jetsung 07-28 16:34
    9
    我用 acme.sh 签发泛域名。
    如果是单个域名,完全可以用 nginx 自有模块来弄让它自签名就行了: https://github.com/nginx/nginx-acme#
  • jetsung 07-28 16:37
    10
    我是再配合 rclone 同步证书,再定时计划监控有更新则重启对应服务(写 hook 触发)。
    同理,CDN 证书也可以写脚本推送。
  • idragonet 07-28 16:41
    11
    用微云,下载脚本自动下载本地 Nginx 。
  • googlefans 07-28 16:59
    12
    这是不是意味着你得把阿里云的账号给 ai ?
  • olddogs 楼主 07-28 17:03
    13
    @googlefans 没有,这个就是代码一步一步执行的定时任务
  • gooin 07-28 17:15
    14
    caddy 真好用
  • anyplace 07-28 17:15
    15
    干嘛要 90 天才续,到期前 7 天才续
    一天一续不好嘛?
    CA 也不是 100%在线的
  • mikawang 07-28 17:18
    16
    不是有 certbot 吗
  • goojia 07-28 17:20
    17
    https://ohttps.com/ 自动更新证书并且部署到阿里云 dns
  • w2GvCF 07-28 17:22
    18
    去他们官方反馈一下优化建议,说不定能被采纳。
  • docx 07-28 17:22
    19
    证书续期和面板还是分成 2 个服务比较好,不要放在一起
  • hzz2 07-28 17:24
    20
    虽然但是 1Panel 算是比较成熟了 https://github.com/1Panel-dev/1Panel
  • icanfork 07-28 17:26
    21
    certmate
  • PolarBears 07-28 17:29
    22
    [免费的,也是最贵的]特别加粗是何意味,再过半年你花钱买证书最长期限也就 100 天
  • congminhcap246 07-28 17:32
    23
    caddy 完全不用管
  • liyunyang 07-28 17:37
    24
    阿里的 pcdn 不是自动续域名证书吗?我已经用好久了
  • c0nstantien 07-28 17:37
    25
    现在推广产品还要自己写用户故事,给你点赞老哥
  • cpstar 07-28 17:40
    26
    自动生成证书这个好说,很多脚本,但是我遇到的问题是,搞了泛域名证书,然后下边分散着若干个服务,以及若干台服务器,需要挨个上去处理,这个就很闹心,三个月来一次。
  • robinchina 07-28 17:51
    27
    我用的腾讯云 CDN ,可以自动续证书
  • alsa 07-28 17:58
    28
    腾讯云企业邮箱证书能不能自动续签?好像邮箱还只能在后台手动续签,自己申请的不认。
  • dif 07-28 17:59
    29
    其实可以试试 ESA ,目前我的 OSS 、站点都是用 ESA ,签发要给泛域名和根域名的证书即可,自动续期。
  • liubai256 07-28 19:41
    30
    @xooass 啊这个是真的方便,阿里云要你绑定的域名数量收费,我之前公司有腾讯云和阿里云的业务,前后差别是真蛋疼,每年快到期了要么按绑定的子域名出钱要么手动一个一个换绑
  • yidev 07-28 20:27
    31
    https://certd.handsfree.work/#/ 这个也很好用
  • chengran630 07-28 20:59
    32
    @cpstar
    一台作为 acme 的申请地,申请之后 通过 aes-256 加密 暴漏到 api ,其他所有 vps 用 ai 写一个一键脚本,每日 1 点获取 api 判断版本号(申请时间) 来更新处理本机的

    我是这样全自动的,一台 vps 通过谷歌的 ssl 申请泛域名证书
  • realpg 07-28 22:13
    33
    早有现成脚本 python 写的 关联 acme.sh post script
    总共就三十几行
  • ETiV 07-28 23:03
    34
    我们有一套成熟的架构

    监控告警部分:

    1. 证书的核心是域名,我们的域名配置存在 GitHub 上,通过 Terraform + Atlantis 服务,经 PR 审批后才能由其他人交叉验证后再执行 apply ,最终生效
    2. 每三个小时,会有自动化的 Action 拉取 Terraform state 里的 DNS 记录,连接每一个域名的 443 端口,如果可连通且不超时,则加入到待探测的列表中(域名、解析值都要放进去);对于例外的,比如非 443 端口的、或者与业务相关但非我公司域名的,也支持额外配置
    3. 根据列表生成一套 telegraf 配置文件,配合使用它的 x509_cert 插件,拉起 telegraf --once 后,就能拿到这些域名的 HTTPS 证书的过期情况,并且写入到远程时序库里
    4. 监控、告警配置在了 Grafana 里,取同一个域名的最小值(因为需要包含域名本身的过期时间、上游签发商的过期时间),过期前 10 天会发出告警


    证书申请部分:

    1. acme.sh 专门跑在一台机器上,新域名证书首次申请签发需手动执行 --issue ,后续会有 cron 自动跑续期
    2. 申请证书也是用了 DNS 验证,DNS API 用了一套基于 Terraform 的,但是一个独立的仓库,没有 Atlantis 人肉参与审批。直接通过 Actions 自动化运行,所以约束了一下:提交的内容只有 json 的 [{name,value}, {...}] ,收到 push 后立即跑 Action:检查是否是 `_acme-challange` 的 name 、套模板,模板里写死 type=TXT ,避免出现意外情况。而后就是 tf init / tf apply -auto-approve
    3. 而后过个 2 、3 分钟,新的解析就会生效,域名证书的签发在正常情况下都会跑完
    4. 签发完后,执行 --deploy ,会把证书、私钥存到我们的 Vault 里。因此我们的 Vault 里会持续有最新的 HTTPS 证书文件

    证书更新部分:

    这一趴搞法比较多,主要分三种情况:
    1. 证书直接配在云服务商的实例里:由我们直接通过预先配置在 Vault 里的 RAM 管理员角色,以 STS Token 的形式,通过各云的 cli 命令行程序执行配置的更新(也是跑在 acme.sh 那台机器上,随 cron 一起更新)
    2. 证书被配在了不支持 API 更新的服务商那里,人肉处理
    3. 被配在了某些业务团队自己的 Nginx 里:给业务团队配置 Vault 的 AppRole ,他们自己来获取自己该拿的证书文件,自己更新
  • lufeng666 07-28 23:20
    35
    评论区为什么没人讨论宝塔?宝塔能做到自动续签的
    我买完服务器首先装宝塔,很方便
  • xuejianxianzun 07-29 05:48
    36
    证书有效期是越改越短,从 1 年到半年到 3 个月。上周刚给一台 Windows server 装了 Win-ACME ,使用 Let's Encrypt 证书并且自动续期,挺方便的
  • kingshao709 07-29 08:35
    37
    为程序员谋福利
  • Seanfuck 07-29 08:59
    38
    还有对象存储的可以一起支持下。
    “比迷宫还复杂的控制台”形容得不错,目前控制台做得最好的是腾讯云。
  • qwertooo 07-29 09:08
    39
    @lufeng666 #35 删库塔臭名昭著.....正规场景肯定没有用宝塔的,我就没见过专业的运维用这玩意。

    用 cdn ,证书是挂在 cdn 上的,不是挂在服务器。
  • PluginsWorld 07-29 09:22
    40
    http://ssl.plugins-world.cn/ 好久之前做了一个自动化续签的,目前自用中,不知道是否满足大家使用
  • moioooo 07-29 09:35
    41
    我买的腾讯云的 ssl 证书。以前一年一换,现在虽然买的还是一年,但是给拆成了 200+200 了。也就说中途得去手动换一次。当然好处就是多的几十天算是腾讯云白送得。
    据说以后证书有效期越来越短。更麻烦了。
  • Cqh888888 07-29 10:13
    42
    给大佬点赞,有空试一下
  • DICK23 07-29 10:52
    43
    我用的 aliyun ESA,页面上提示证书会自动续期,用户自己导入的除外
* 帖子来源V2EX
返回