引言:SSL证书有效期缩短趋势下的自动化诉求
行业安全标准的风向,这些年大家有目共睹,是越吹越紧了。SSL证书的有效期从当初的几年一路压缩到现在的1年,而CA/Browser论坛在2025年通过的SC-081提案,更是要将公开信任证书的最长有效期进一步缩短。这意味着什么?意味着运维人员得把证书的申请、验证、续签、部署这些活儿,干得越来越频繁。对于手头管着好几个域名,或者架构是微服务的企业来说,光靠手动去管,效率低下不说,稍不留神证书过期了,业务中断、安全风险可就全都找上门了。

好在,阿里云的证书管理服务把这事儿变得简单了不少。它提供了一套从证书签发、托管到自动化部署的完整能力,说白了就是帮用户把过去那个每个月都要记着去干的“手动任务”,变成“一次性配置好,后面系统自己跑”。另一边,以acme.sh和Certbot为代表的开源工具,通过ACME协议跟阿里云DNS的API深度对接,给那些想用免费证书(比如Let's Encrypt)的用户,也提供了一条性价比很高的自动化路子。这篇文章,我们就从官方托管服务、acme.sh方案、Certbot方案,再到一些自动部署的脚本,把这四条技术路径掰开揉碎了聊聊,看看怎么在阿里云上把SSL证书的自动续签和部署安排得明明白白。
首先得登录阿里云控制台,入口是:阿里云控制台
一、阿里云SSL证书体系概述
1.1 数字证书管理服务V2.0架构
从2026年2月25日开始,阿里云的SSL证书管理就全面切换到了V2.0版本。这个新版本是订阅模式的,用户买了证书后,系统会自动生成一个证书实例,但得再走一个“申请”的流程,才能拿到真正能部署的证书。整个流程拆开来看,就是买证书、申请证书、等签发、部署证书,四个步骤一个都不能少。
证书类型这块,阿里云提供了三种:DV(域名型)、OV(企业型)和EV(企业增强型)。DV证书最简单,验证一下域名所有权就行,签发速度贼快,一般1到15分钟,适合个人网站或小企业。OV证书就要做企业实名验证了,证书上会显示企业信息,企业官网或者电商平台用比较合适。EV证书审查最严格,信任度最高,金融机构和大型企业是它的主要用户。域名类型上,有单域名、通配符域名(也就是泛域名)和多域名这三种可选。
1.2 证书续签的核心概念
这里需要明确一点:SSL证书的续费,本质上是重新签发一张全新的证书,而不是给旧证书延期。新证书到手后,旧证书在它自己的有效期内还是能正常用的。如果你给证书开启了托管服务,那系统就会在旧证书到期前自动触发续签流程,你基本不用管。但是,要注意一下,因为CA那边的规定,SSL证书服务本身是不支持自动续费的,你得在买证书的时候就把托管服务的额度一块儿预购了,系统续签的时候会自动从额度里扣。
二、方案一:官方托管服务实现全自动续签与部署
2.1 托管服务的核心能力
证书托管服务是阿里云的一个付费增值功能,目标就是帮用户把证书的生命周期管得服服帖帖,实现全自动化。它的能力主要就三点:
自动证书申请:系统会盯着托管证书的有效期,一旦发现快到期了(比如正式证书只要剩余有效期少于15天),就会自动触发续期,用原来的证书信息向CA去申请新的。自动部署:新证书签发下来,系统会自动把它部署到你已经关联好的阿里云产品上,比如CDN、SLB、WAF这些。状态通知:新证书签发了、部署好了,系统会通过邮件、信息这些方式通知你,让你心里有数。
2.2 托管服务的前提条件
想让托管服务顺顺利利地自动续期,有几个条件得满足:第一,证书绑定的域名得是用阿里云DNS解析的,而且这个域名和证书得在同一个阿里云账号下;第二,域名得已经完成过首次验证;第三,在CA那边备案的组织信息、联系人信息什么的,都还得是有效的。如果哪个条件不满足,那不好意思,就得人工去处理证书申请和验证的流程了。
2.3 开启托管服务的操作步骤
第一步:买证书的时候就把托管打开。登录数字证书管理服务控制台,进到SSL证书管理V2.0页面,在“正式证书”那个页签下点“购买证书”。选好证书类型、域名类型、证书品牌和订阅时长后,记得勾上“开启自动托管”这个选项。开启后,证书到期前系统会自动申请下一张,每次申请消耗1次托管额度。如果账户里额度不够了,系统会自动帮你买。
第二步:申请证书并验证域名。买完证书,在证书列表里找到刚才那个实例,点击“申请证书”。填上证书绑定的域名和联系人信息。域名验证方式有两种:如果域名在阿里云,可以选自动DNS验证,省事;不然就用手动DNS验证。提交申请后,完成域名所有权的验证就行了。
第三步:第一次把证书部署到云产品。被托管的证书,得先成功部署到一个云产品上,以后新签发的证书才会自动继承这个部署列表。在证书列表里找到那个被托管的证书,点“云产品部署”,选好要部署的云产品比如CDN、DCDN、SLB,以及对应的资源,确认提交就好。
第四步:验证自动续签和部署。上面这些都配置好以后,系统就会在证书到期前自动触发续签,新证书签下来就自动部署到你的云产品上。整个过程,你基本可以当个甩手掌柜。
2.4 托管服务的费用说明
托管服务不是免费的,每次自动续签,费用是40美元。注意,这个费用只是自动更新服务的钱,可不包含买新证书的费用。你买托管服务,实际上是预存了自动续签的额度,系统不会立刻签发新证书,得等到旧证书快到期了才会触发续签流程。
三、方案二:acme.sh + 阿里云DNS API实现免费证书自动化
3.1 ACME协议与acme.sh简介
ACME,全称是Automatic Certificate Management Environment,是Let's Encrypt推出的一个自动化SSL证书管理协议。有了它,用户就能轻松实现证书的自动申请、更新和管理,彻底告别手动操作。acme.sh呢,是ACME协议的一个纯Shell客户端实现,好处是它不需要依赖其他东西,内置了DNS API的支持,还会自动配置cron任务。跟需要Python环境的Certbot比起来,acme.sh这个纯Shell的特性,让它在各种Linux环境里部署起来都更方便。
3.2 环境准备与acme.sh安装
第一步:装acme.sh。执行下面这行命令就行:
装好后,acme.sh会待在~/.acme.sh/这个目录里,以后生成的证书也会按域名分文件夹存放到这个目录下。安装过程会自动配好cron定时任务,为后面的自动续期做准备。
第二步:配阿里云DNS API密钥。登录阿里云控制台,进到访问控制RAM,给acme.sh单独创建一个子账号,只给它管理云解析DNS的权限。然后拿到AccessKey ID和AccessKey Secret,在系统里设置环境变量:
最佳实践是:为这个场景单独创建一个子账号,只赋予DNS管理的最小权限,别用主账号的密钥,不然风险太高。
3.3 签发SSL证书
配置好之后,用下面这个命令签发证书:
这个命令会自动调用阿里云DNS API,在域名解析里加上_acme-challenge的TXT记录用于验证,等CA那边验证完了,再自动把记录清掉。如果自动写入失败了,没关系,可以从日志里找到TXT值,手动去阿里云控制台添加。签发成功后,证书文件就在~/.acme.sh/域名目录/下面。
3.4 安装证书到Web服务器
拿Nginx举个例子,用下面这个命令把证书装到指定位置:
--reloadcmd这个参数特别关键,它指定了证书更新后要执行的命令,比如让Nginx重载配置,新证书就能立刻生效。
3.5 自动续期机制
acme.sh安装的时候就已经自动配好了cron定时任务,默认会在证书到期前60天自动尝试续期。当然,你也可以手动运行下面的命令来触发续期:
续期成功后,acme.sh会自动执行你之前安装证书时指定的--reloadcmd,完成Web服务器的证书热加载。整个过程,基本不用你操什么心。
四、方案三:Certbot + DNS插件实现泛域名证书自动续期
4.1 Certbot与DNS插件概述
Certbot是Let's Encrypt官方推荐的ACME客户端。通过给它装上对应的DNS插件,它就能直接调用DNS服务商的API来完成域名验证记录的添加和清理,完全绕开人工操作。对于阿里云DNS,对应的插件是certbot-dns-aliyun。DNS验证这种方式,特别适合泛域名证书的场景,因为不用为每个子域名单独上传验证文件,省事很多。
4.2 安装Certbot与DNS插件
第一步:装Certbot。在Ubuntu/Debian系统里,执行:
第二步:装阿里云DNS插件:
第三步:配置阿里云API凭证。创建一个凭证文件,位置可以放在/etc/letsencrypt/credentials.ini,内容如下:
为了安全,得设置一下这个文件的权限:
4.3 签发泛域名证书
用下面这个命令签发泛域名证书:
Certbot会自动调用阿里云DNS API添加TXT验证记录,等验证完了再自动清理。签发成功后,证书文件会放在/etc/letsencrypt/live/域名/目录下。
4.4 配置自动续期
用cron定时任务来定期执行续期命令:
添加下面这条定时任务(每天凌晨执行续期检查):
或者直接用它系统自带的续期命令:
--renew-hook这个参数,就是用来指定续期成功后执行的重载命令。
五、进阶实践:将开源证书自动部署到阿里云云产品
5.1 部署到阿里云CDN的自动化脚本
如果你用的是acme.sh或Certbot签发的免费证书,想把它部署到阿里云的CDN、SLB这些云产品上,那就得通过阿里云的OpenAPI来实现自动上传和绑定了。下面是一个用Python写的自动化部署脚本例子:
这个脚本通过调用阿里云CDN的SetDomainServerCertificate接口,把证书内容上传并绑定到指定域名。建议你把这个脚本跟acme.sh的--reloadcmd或者Certbot的--renew-hook结合起来,这样证书续签成功后,就能自动触发部署。
5.2 使用GitHub Actions实现全自动证书管理
GitHub Actions是另一种轻量级的证书自动化管理方案。你可以Fork一个开源项目仓库,然后配置好阿里云的访问密钥作为GitHub Secrets,再设置一个定时触发的工作流,就能实现证书的自动申请、续签和部署。下面是一个典型的工作流配置例子:
这个工作流会在每个月1号自动触发,完成证书续签后,再调用部署脚本去更新CDN上的证书。
5.3 部署到SLB负载均衡
对于SLB负载均衡的场景,可以通过阿里云OpenAPI的UploadServerCertificate接口上传证书,然后再用SetLoadBalancerHTTPSListenerAttribute接口把证书绑定到HTTPS监听器上。阿里云也支持证书的自动轮转功能,当证书更新时,系统可以自动同步到SLB监听器。如果再结合函数计算编写自动化脚本,通过事件触发器监控证书过期事件,自动调用SLB API更新证书,那就能构建一个端到端的全自动化流程了。
六、证书监控、告警与应急处理
6.1 多级告警配置
就算自动化续签搞得再完善,建立一个靠谱的监控告警体系仍然是保障业务连续性的重要防线。建议用阿里云云监控,设置证书过期前30天、7天、1天的多级告警。告警方式可以选信息、邮件、钉钉机器人这些。如果你用的是开源工具链,也可以在cron任务里加个证书有效期检查的逻辑,一旦检测到证书剩余有效期不足,就主动发告警通知。
6.2 续签失败应急处理
免费证书,比如Let's Encrypt,是存在一定续签失败风险的,比如域名解析异常、CA验证失败等等。阿里云的ESA服务会在免费证书到期前30天尝试自动续签,如果失败了,会通过信息和邮件通知你,这时候你就需要手动上传新的证书,不然业务会受影响。所以,建议建立一套应急处理流程:收到续签失败通知后,第一时间登录证书管理控制台,查清楚失败原因;根据失败类型(DNS解析异常、验证失败、CA审核问题等),采取对应的修复措施;然后手动重新申请证书并部署;最后排查自动化流程里的配置问题,避免下次续签再失败。
七、方案对比与选型建议
7.1 四种方案对比
官方托管服务:最适合企业级生产环境。虽然要付费,但最省心,支持一键部署到CDN、SLB、WAF等云产品,续签和部署全自动。适合对稳定性要求高、预算充足的场景。
acme.sh方案:最适合Linux运维人员。纯Shell实现、零依赖、自动配置cron。适合ECS自建Web服务器的场景,配合阿里云DNS API,泛域名证书的自动续期也很轻松。
Certbot方案:最适合Python技术栈的团队。官方支持完善,社区生态丰富,适合需要灵活定制续期逻辑的场景。
GitHub Actions方案:最适合代码仓库与CI/CD流程深度集成的团队,不用自建服务器。对于个人开发者和小型团队来说,是个不错的选择。
7.2 选型决策树
如果主要用阿里云云产品(CDN、SLB等)且预算充足 -> 选官方托管服务
如果是在ECS上自建Web服务,希望零成本 -> 选acme.sh + 阿里云DNS API
如果团队熟悉Python,需要灵活定制 -> 选Certbot + DNS插件
如果希望完全Serverless,并且用GitHub -> 选GitHub Actions方案
八、常见问题解答
问1:开启托管服务后,证书到期前多久会自动续签?
正式证书在剩余有效期小于15天时会自动触发续签流程。系统用原来的证书信息向CA提交新证书申请,新证书签发后就自动部署到已关联的云产品。
问2:acme.sh安装后如何验证自动续期是否配置成功?
可以通过crontab -l命令看看有没有acme.sh的定时任务。也可以手动运行acme.sh --cron命令测试续期流程。建议首次配置后,盯着日志文件~/.acme.sh/acme.sh.log,看看续期是不是正常执行。
问3:免费证书和付费证书在自动续签方面有什么区别?
付费证书,特别是开了托管服务的,由阿里云和CA机构合作提供,续签成功率很高。免费证书,比如Let's Encrypt,由第三方CA签发,存在一定的续签失败风险,而且有效期通常只有90天。ESA服务虽然支持免费证书自动续签,但续签失败时需要手动处理。
问4:泛域名证书如何使用DNS验证实现自动续签?
泛域名证书不能用HTTP文件验证的方式,必须走DNS验证。通过acme.sh或Certbot配合阿里云DNS API插件,系统会自动在域名解析中添加_acme-challenge的TXT记录用于验证,验证完成后自动清理。整个过程完全自动化,不需要人工干预。
问5:证书续签后是否需要重启Web服务器?
是的,需要重新加载Web服务器的配置,新证书才能生效。在acme.sh里可以通过--reloadcmd参数指定重载命令;在Certbot里可以用--renew-hook参数。对于Nginx,重载命令是systemctl reload nginx;对于Apache,是systemctl reload httpd。
问6:如何将acme.sh签发的证书部署到阿里云CDN?
需要编写脚本调用阿里云CDN的OpenAPI接口。具体步骤:利用acme.sh的--reloadcmd,在证书续签后触发部署脚本;脚本读取新签发的证书文件内容;通过SetDomainServerCertificate接口把证书上传并绑定到CDN域名。或者,你也可以用GitHub Actions等CI/CD工具来实现全自动部署。
