Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
olddogs
V2EX  ›  云计算

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

  •  
  •   olddogs · 11h 43m ago · 2823 views

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

    我心里一沉。

    又是证书过期了。

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

    免费的,也是最贵的

    阿里云免费 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

    Supplement 1  ·  4h 7m ago

    APPEND 1 (更新于刚才)

    看到评论区有兄弟提到安全顾虑(毕竟涉及 API Key 和证书私钥),其实这里大家可能有个小误解,我想补充说明一下:

    GoPanel 不仅仅是用来管远程服务器的,它完全可以直接安装在你自己的本地电脑(Mac/Linux)/ 局域网 NAS 上!

    安装其实就一行命令,非常轻量:

    $ bash <(curl -fsSL https://gopanel.run)
    
    

    为什么建议尝试“本地部署”模式?

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

    我是这样全自动的,一台 vps 通过谷歌的 ssl 申请泛域名证书
    realpg
        33
    realpg  
       5h 26m ago
    早有现成脚本 python 写的 关联 acme.sh post script
    总共就三十几行
    ETiV
        34
    ETiV  
       4h 36m ago
    我们有一套成熟的架构

    监控告警部分:

    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
        35
    lufeng666  
       4h 19m ago
    评论区为什么没人讨论宝塔?宝塔能做到自动续签的
    我买完服务器首先装宝塔,很方便
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   957 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 19:39 · PVG 03:39 · LAX 12:39 · JFK 15:39
    ♥ Do have faith in what you're doing.