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

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

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

    我是这样全自动的,一台 vps 通过谷歌的 ssl 申请泛域名证书
    realpg
        33
    realpg  
       1 day ago
    早有现成脚本 python 写的 关联 acme.sh post script
    总共就三十几行
    ETiV
        34
    ETiV  
       1 day 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  
       1 day ago
    评论区为什么没人讨论宝塔?宝塔能做到自动续签的
    我买完服务器首先装宝塔,很方便
    xuejianxianzun
        36
    xuejianxianzun  
       1 day ago
    证书有效期是越改越短,从 1 年到半年到 3 个月。上周刚给一台 Windows server 装了 Win-ACME ,使用 Let's Encrypt 证书并且自动续期,挺方便的
    kingshao709
        37
    kingshao709  
       1 day ago via Android
    为程序员谋福利
    Seanfuck
        38
    Seanfuck  
       1 day ago
    还有对象存储的可以一起支持下。
    “比迷宫还复杂的控制台”形容得不错,目前控制台做得最好的是腾讯云。
    qwertooo
        39
    qwertooo  
       1 day ago
    @lufeng666 #35 删库塔臭名昭著.....正规场景肯定没有用宝塔的,我就没见过专业的运维用这玩意。

    用 cdn ,证书是挂在 cdn 上的,不是挂在服务器。
    PluginsWorld
        40
    PluginsWorld  
       1 day ago
    http://ssl.plugins-world.cn/ 好久之前做了一个自动化续签的,目前自用中,不知道是否满足大家使用
    moioooo
        41
    moioooo  
       1 day ago
    我买的腾讯云的 ssl 证书。以前一年一换,现在虽然买的还是一年,但是给拆成了 200+200 了。也就说中途得去手动换一次。当然好处就是多的几十天算是腾讯云白送得。
    据说以后证书有效期越来越短。更麻烦了。
    Cqh888888
        42
    Cqh888888  
       1 day ago
    给大佬点赞,有空试一下
    DICK23
        43
    DICK23  
       1 day ago
    我用的 aliyun ESA,页面上提示证书会自动续期,用户自己导入的除外
    draguo
        44
    draguo  
       1 day ago   ❤️ 1
    难道只有我用 certd ?
    vishun
        45
    vishun  
       22h 43m ago
    这种广告的不应该出现在"推广"节点中吗?
    slation
        46
    slation  
       22h 9m ago
    我也刚 AI 手搓了一个类似的东西出来,不过我的证书是在 F5 上
    lc7029
        47
    lc7029  
       21h 19m ago
    自签证书就好了,有效期到 9999 年,不用考虑换证书的事。用户不信任证书那就别看
    bowencool
        48
    bowencool  
       20h 0m ago
    @draguo +1
    zengxs
        49
    zengxs  
       19h 56m ago
    我是 cert-manager 自动管理证书 + 脚本自动推送 ,早点做自动化改造吧 兄弟们

    前面说三个月就烦的兄弟们,有没有了解过,再过两年要证书最长有效期要缩短到 47 天了 哈哈哈
    NouveauNom
        50
    NouveauNom  
       19h 27m ago
    演示挂了
    Coller
        51
    Coller  
       17h 46m ago
    @NouveauNom 谢谢提醒
    galenzhao
        52
    galenzhao  
       10h 48m ago
    acme+aliyun-cli ?
    windowlife
        53
    windowlife  
       3h 38m ago
    商用还用免费证书,是不是有点不厚道,收费的证书也不贵吧
    mylara
        54
    mylara  
       3h 4m ago
    阿里云 云虚拟主机 k 可以使用吗?
    mylara
        55
    mylara  
       3h 3m ago
    @mylara 手滑了,多打了个 k
    laobaiguolai
        56
    laobaiguolai  
       2h 43m ago
    十几块一年的证书不能用吗?或者一百多块钱的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3484 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 138ms · UTC 04:54 · PVG 12:54 · LAX 21:54 · JFK 00:54
    ♥ Do have faith in what you're doing.