当前位置: 首页 > news >正文

Let‘s Encrypt证书有效期缩短至90天后,如何实现自动续期

Let’s Encrypt证书有效期缩短至90天后,如何实现自动续期

打开网站突然发现浏览器地址栏一把红色小锁,提示"您的连接不是专用连接"——SSL证书过期了。这可能是站长最不想看到的画面之一:用户无法正常访问、搜索引擎排名下降、甚至被浏览器直接拦截。

更糟的是,从2024年起免费SSL证书有效期已统一缩短为3个月,意味着每年至少要手动续期4次。如果管理多个域名,忘记续期几乎是迟早的事。

解决方案只有一个:自动续期。本文对比3种主流的SSL证书自动续期方案,帮你找到最适合自己的方式。

一、3种方案速览

方案操作难度泛域名自动续期是否需要写脚本是否收费
第三方证书管理平台不需要免费
Let’s Encrypt + Certbot需自写hook脚本必须免费
云厂商证书自动续期不需要收费

下面逐一详解。

二、方案一:第三方证书管理平台

除了 Let’s Encrypt 官方工具和云厂商服务,市面上还有一些第三方证书管理平台(如乐此云签等),提供从证书申请到自动续期的一站式图形化操作。证书申请在浏览器里点几下即可完成,自动续期则通过平台生成的一键部署命令,复制到服务器上执行一次即可永久生效。

证书申请

如果证书还未申请,先在对应平台完成申请:

  1. 登录平台控制台(如 letsssl.cn),点击“申请证书”

  2. 填写域名信息:单域名直接输入域名,泛域名勾选“泛域名,包含根域”即可一张证书覆盖*.example.com+example.com

  3. 按照平台提示完成 DNS 域名验证(支持 CNAME 验证,比传统 TXT 验证更方便),验证通过后证书自动签发,下载对应服务器格式的证书文件部署到服务器即可

自动续期配置

证书申请完成后,接下来配置自动续期,确保证书到期前自动更新:

  1. 在证书列表中找到需要自动续期的证书,点击“自动续期”

  2. 填写服务器信息(证书路径、密钥路径、服务器类型、重启命令等),平台会自动生成一键部署脚本:

具体参数说明:

  • 证书路径:证书文件在服务器上的存放路径,如/data/nginx/ssl/example.com.crt
  • 密钥路径:私钥文件在服务器上的存放路径,如/data/nginx/ssl/example.com.key
  • 服务器类型:选择 Nginx / Apache / Tomcat / IIS 等
  • 重启命令:证书更新后重载服务的命令,如docker exec nginx nginx -s reloadsystemctl reload nginx
  1. 点击生成,平台自动生成专属部署脚本,完整命令类似:

Linux + Nginx 示例

curl-o/usr/bin/letsencrypt-renew https://平台下载地址/letsencrypt-renewchmod+x /usr/bin/letsencrypt-renewcrontab-l>/etc/crontab&&echo'18 4 10,25 * * root /usr/bin/letsencrypt-renew -token=你的Token -key_path=/data/nginx/ssl/example.com.key -server_type=nginx -cert_path=/data/nginx/ssl/example.com.cert -command="docker exec nginx nginx -s reload" -backup=true '>>/etc/crontabcrontab/etc/crontab /usr/bin/letsencrypt-renew-token=你的Token-key_path=/data/nginx/ssl/example.com.key-server_type=nginx-cert_path=/data/nginx/ssl/example.com.cert-command="docker exec nginx nginx -s reload"-backup=true

Windows + IIS 示例

# 下载续期工具Invoke-WebRequest-Uri"https://平台下载地址/letsencrypt-renew.exe"-OutFile"C:\letsencrypt-renew.exe"# 创建Windows计划任务(每月10日和25日凌晨4:18执行)$action=New-ScheduledTaskAction-Execute"C:\letsencrypt-renew.exe"-Argument"-token=你的Token -cert_path=C:\ssl\example.com.pfx -server_type=iis -site_name=你的站点名 -backup=true"$trigger=New-ScheduledTaskTrigger-Monthly-DaysOfMonth 10,25-At 4:18AMRegister-ScheduledTask-TaskName"SSLAutoRenew"-Action$action-Trigger$trigger-RunLevel Highest# 立即执行一次C:\letsencrypt-renew.exe-token=你的Token-cert_path=C:\ssl\example.com.pfx-server_type=iis-site_name=你的站点名-backup=true
  1. 将命令复制到服务器终端执行一次即可,后续全自动运行

运行机制

脚本执行后会自动创建定时任务(Linux 为 cron,Windows 为计划任务),每15天检查一次证书状态,到期前自动完成续期并重载服务。同时支持证书备份,续期前自动备份旧证书,防止异常情况导致服务中断。

优势

  • 图形化配置:所有参数在浏览器界面填写,不需要编辑配置文件或写脚本
  • 支持泛域名自动续期:单域名和泛域名证书均可全自动续期
  • 一键部署:生成命令复制到服务器执行一次即可,无需反复配置

不足

  • 依赖第三方平台:续期脚本需要连接平台服务器获取新证书,平台服务中断会影响续期
  • 服务器需访问外网:续期脚本需要从平台下载新证书,内网环境无法使用
  • Token 安全风险:服务器上保存的 Token 泄露后他人可获取你的证书

三、方案二:Let’s Encrypt + Certbot

Certbot 是 Let’s Encrypt 官方推荐的客户端工具。很多人以为单域名证书只要一条certbot renew就能自动续期,但实际情况并没有那么简单——无论是单域名还是泛域名,自动续期都有不小的配置门槛,只是难点不同。

单域名证书自动续期

单域名证书使用 HTTP-01 验证方式,原理是 Let’s Encrypt 会从公网访问你服务器的80端口,读取一个验证文件来确认域名所有权。这意味着你的服务器80端口必须对外开放,且 Let’s Encrypt 能够从公网正常访问到验证路径——这在很多实际场景中并不容易满足:

  • 服务器在内网,没有公网IP(如企业内网、NAT后面)→ HTTP-01 验证无法完成
  • 80端口被防火墙/安全组拦截 → 需要额外开放端口
  • 使用CDN或反向代理 → 验证请求可能无法到达源站
  • 使用Docker/K8s容器化部署 → 端口映射和路径挂载需要额外处理

如果以上条件都满足,配置流程如下:

  1. 安装 certbot:
# Ubuntu/Debiansudoaptupdatesudoaptinstallcertbot# CentOS/RHELsudoyuminstallcertbot
  1. 申请证书。有两种模式可选,各有局限:

standalone 模式:certbot 自己启动一个临时Web服务器监听80端口,申请和续期时必须临时停止 Nginx/Apache 等Web服务,线上环境会造成短暂中断:

# 如果 Nginx 正在运行,先停止sudosystemctl stop nginx# 申请证书sudocertbot certonly--standalone-dexample.com-dwww.example.com# 重新启动 Nginxsudosystemctl start nginx

webroot 模式:不需要停止服务,但需要确保 certbot 写入验证文件的目录能被 Nginx 正确代理,且 Let’s Encrypt 能从公网访问到:

sudocertbot certonly--webroot-w/var/www/html-dexample.com-dwww.example.com

webroot 模式要求 Nginx 配置中允许外部访问/.well-known/acme-challenge/路径,如果你的 Nginx 有安全限制(如只允许特定IP访问),还需要额外放行:

# Nginx 中需要确保以下路径可被公网访问 location /.well-known/acme-challenge/ { root /var/www/html; }
  1. 配置自动续期定时任务:
# 测试续期命令是否正常sudocertbot renew --dry-run# 添加 cron 定时任务,每天凌晨2:30检查续期echo'30 2 * * * root certbot renew --quiet --deploy-hook "systemctl reload nginx"'>>/etc/crontab

可以看到,即便是"最简单"的单域名自动续期,也需要确保80端口公网可达、正确配置验证路径、处理Web服务中断(standalone模式)或Nginx路径放行(webroot模式),并不是一条命令就能搞定的。

泛域名证书自动续期(高难度)

泛域名证书必须使用 DNS-01 验证,而 certbot 在--manual模式下每次都需要手动添加 DNS TXT 记录,无法自动续期。要实现泛域名自动续期,必须自行编写一个 hook 脚本,通过 API 调用域名服务商的接口来自动添加和删除 TXT 记录。

以下是完整的配置流程:

1. 编写 DNS 验证 hook 脚本

以阿里云 DNS 为例,需要编写两个脚本:一个用于添加 TXT 记录,一个用于清理 TXT 记录。

添加 TXT 记录脚本certbot-dns-auth.sh

#!/bin/bash# 阿里云 DNS API 配置ACCESS_KEY_ID="你的AccessKeyId"ACCESS_KEY_SECRET="你的AccessKeySecret"DOMAIN="example.com"# 解析域名参数FULl_DOMAIN_NAME="_acme-challenge.${CERTBOT_DOMAIN}"VALIDATION="${CERTBOT_VALIDATION}"# 获取域名解析记录ID(需要调用阿里云API)# 注意:以下为简化示例,实际使用需要实现完整的阿里云API签名# 1. 获取主域名的 ZoneIdZONE_ID=$(curl-s"https://alidns.aliyuncs.com/"\--data-urlencode"Action=DescribeDomains"\--data-urlencode"DomainName=${DOMAIN}"\--data-urlencode"AccessKeyId=${ACCESS_KEY_ID}"\--data-urlencode"SignatureMethod=HMAC-SHA1"\--data-urlencode"SignatureVersion=1.0"\--data-urlencode"SignatureNonce=$(uuidgen)"\--data-urlencode"Timestamp=$(date-u+%Y-%m-%dT%H:%M:%SZ)"\--data-urlencode"Version=2015-01-09"\|python3-c"import sys,json;print(json.load(sys.stdin)['DomainList']['Domain'][0]['DomainId'])")# 2. 添加 TXT 记录curl-s"https://alidns.aliyuncs.com/"\--data-urlencode"Action=AddDomainRecord"\--data-urlencode"DomainName=${DOMAIN}"\--data-urlencode"RR=_acme-challenge"\--data-urlencode"Type=TXT"\--data-urlencode"Value=${VALIDATION}"\--data-urlencode"AccessKeyId=${ACCESS_KEY_ID}"\--data-urlencode"SignatureMethod=HMAC-SHA1"\--data-urlencode"SignatureVersion=1.0"\--data-urlencode"SignatureNonce=$(uuidgen)"\--data-urlencode"Timestamp=$(date-u+%Y-%m-%dT%H:%M:%SZ)"\--data-urlencode"Version=2015-01-09">/dev/null# 3. 等待 DNS 记录生效echo"等待DNS记录生效..."sleep30

重要提示:上方脚本为简化示例,阿里云 API 需要严格的 HMAC-SHA1 签名认证,实际使用需要实现完整的签名逻辑(包括参数排序、URL编码、Base64编码等),代码量通常在100行以上。

清理 TXT 记录脚本certbot-dns-cleanup.sh

#!/bin/bashACCESS_KEY_ID="你的AccessKeyId"ACCESS_KEY_SECRET="你的AccessKeySecret"DOMAIN="example.com"# 查询并删除之前添加的 TXT 记录# 同样需要完整的阿里云API签名逻辑RECORD_ID=$(curl-s"https://alidns.aliyuncs.com/"\--data-urlencode"Action=DescribeSubDomainRecords"\--data-urlencode"SubDomain=_acme-challenge.${CERTBOT_DOMAIN}"\--data-urlencode"Type=TXT"\--data-urlencode"AccessKeyId=${ACCESS_KEY_ID}"\|python3-c"import sys,json;print(json.load(sys.stdin)['DomainRecords']['Record'][0]['RecordId'])")curl-s"https://alidns.aliyuncs.com/"\--data-urlencode"Action=DeleteDomainRecord"\--data-urlencode"RecordId=${RECORD_ID}"\--data-urlencode"AccessKeyId=${ACCESS_KEY_ID}"\>/dev/null
2. 使用 hook 脚本申请泛域名证书
sudocertbot certonly--manual\--preferred-challenges=dns\--manual-auth-hook /path/to/certbot-dns-auth.sh\--manual-cleanup-hook /path/to/certbot-dns-cleanup.sh\-d"*.example.com"\-dexample.com
3. 配置自动续期
# 测试自动续期sudocertbot renew --dry-run# 添加定时任务echo'30 2 * * * root certbot renew --quiet --deploy-hook "systemctl reload nginx"'>>/etc/crontab
不同DNS服务商的差异

每家DNS服务商的API接口都不同,以下列出主要服务商的情况:

DNS服务商API复杂度官方SDK需要额外处理
阿里云DNS有(Python/Java/Go)需实现HMAC-SHA1签名,或使用官方SDK
腾讯云DNSPod有(Python/Java/Go)需实现TC3-HMAC-SHA256签名
CloudflareAPI Token即可,签名简单
华为云DNS需实现AK/SK签名
GoDaddyAPI Key + Secret,签名简单

提示:如果你觉得编写 hook 脚本太复杂,可以改用 certbot-dns-cloudflare 等官方插件,但目前仅支持 Cloudflare。国内DNS服务商没有官方插件,必须自行编写脚本。

优势

  • 官方工具:Let’s Encrypt 官方维护,稳定可靠,文档丰富
  • 单域名续期成熟certbot renew一行命令搞定,自动续期非常可靠
  • 社区活跃:遇到问题容易找到解决方案

不足

  • 泛域名续期配置极其复杂:需要自行编写 DNS API hook 脚本,涉及 API 签名认证、错误处理等,代码量通常在100行以上
  • 每家DNS服务商API不同:换一个DNS服务商就要重写一套脚本
  • API密钥安全风险:DNS 服务商的 API 密钥以明文形式存储在脚本和服务器上,一旦泄露攻击者可以篡改你的 DNS 解析
  • 需要命令行操作:全程终端操作,排错靠看日志
  • 占用80端口:standalone 模式需要临时停止 Web 服务

适合人群:熟悉 Linux 和 Shell 脚本开发、仅需单域名自动续期的用户。如果你需要泛域名自动续期且不愿意折腾脚本,这个方案会让你非常痛苦。

四、方案三:云厂商证书自动续期

主流云厂商也提供了SSL证书管理服务,部分支持自动续期功能,但大多需要购买付费服务。

各云厂商自动续期支持情况

云厂商免费证书自动续期付费证书自动续期泛域名支持年额度费用
阿里云✓(需购买证书部署服务)20张约 ¥600/年起
腾讯云✓(需购买证书管理服务)20张约 ¥500/年起
华为云✓(需购买SSL证书管理服务)20张约 ¥600/年起
AWS✓(ACM免费证书)无限制仅限AWS资源使用

注意:阿里云、腾讯云、华为云的免费个人测试证书均不支持自动续期,要使用自动续期功能需要购买付费的证书管理/部署服务。AWS Certificate Manager(ACM)提供免费证书且支持自动续期,但证书只能绑定到AWS自家服务(ELB、CloudFront等),无法导出使用。

以阿里云为例

  1. 登录阿里云控制台,进入SSL证书证书部署服务
  2. 购买证书部署服务(收费)
  3. 配置部署任务:选择证书、目标服务器/负载均衡、部署方式
  4. 开启自动续期和自动部署

优势

  • 图形化操作:在云平台控制台完成配置
  • 与云产品集成:证书可以直接部署到云服务器、负载均衡、CDN等
  • 运维托管:续期和部署由云厂商负责

不足

  • 需要收费:自动续期功能需要购买付费服务,年费通常在 ¥500-600 起
  • 不支持泛域名:免费证书和付费DV证书均不支持泛域名,每个子域名需要单独一张证书
  • 年额度有限:免费证书仅20张/年,域名多了不够用
  • 绑死云平台:证书续期和部署只能在对应云平台内使用
  • 仅限云内资源:证书通常只能部署到该云厂商的产品上,跨平台使用受限

适合人群:已在阿里云/腾讯云/华为云上部署服务、预算充裕、域名数量少且不需要泛域名的企业用户。

五、3种方案详细对比

核心指标对比

对比项第三方平台Certbot云厂商
费用免费免费收费(¥500+/年)
单域名自动续期✓(付费)
泛域名自动续期需自写hook脚本
图形化配置
需要编写脚本不需要泛域名必须不需要
第三方依赖依赖平台服务绑定云平台
年额度限制无限制无限制20张
配置耗时5分钟单域名10分钟 / 泛域名1小时+10分钟+购买流程
跨平台支持Linux + Windows主要Linux仅限对应云平台
证书导出部分支持

配置复杂度对比

以配置泛域名证书自动续期为例,三种方案的操作步骤对比:

步骤第三方平台Certbot云厂商
1浏览器中填写证书路径、密钥路径安装 certbot购买证书部署服务
2填写服务重启命令编写 DNS API 认证脚本(100+行)配置部署任务
3复制生成的一键命令到服务器编写 TXT 记录添加脚本开启自动续期
4执行命令,完成编写 TXT 记录清理脚本
5配置 certbot 手动 hook 参数
6测试自动续期流程
7配置 cron 定时任务

六、常见问题

Q1:SSL证书过期了,紧急恢复怎么做?

第一步:立即重新申请或续期证书。如果使用第三方平台,登录后在证书列表点击续期,几分钟即可完成。

第二步:将新证书部署到服务器,替换过期的证书文件。

第三步:重载 Web 服务(如nginx -s reload),新证书即可生效。

第四步:配置自动续期,避免再次过期。这才是长久之计——手动续期终究会遗忘。

Q2:证书还有多久过期就该续期?

Let’s Encrypt 证书建议在到期前30天内续期。第三方平台的自动续期脚本通常每15天检查一次,到期前会自动触发续期。Certbot 的certbot renew命令也会在证书到期前30天内自动续期。

Q3:自动续期失败了怎么办?

  • 第三方平台:脚本会在续期前自动备份旧证书,即使续期失败,旧证书仍有效直到过期,你可以在修复问题后手动触发续期
  • Certbot:检查 cron 日志(/var/log/letsencrypt/letsencrypt.log),常见失败原因是 DNS API 调用失败或 80 端口被占用
  • 云厂商:联系云厂商技术支持

Q4:泛域名证书为什么比单域名证书续期复杂?

泛域名证书必须通过 DNS-01 验证来证明域名所有权,即需要在 DNS 中添加一条_acme-challenge的 TXT 记录。单域名证书可以用 HTTP-01 验证(在网站根目录放一个验证文件),certbot 可以自动完成。但 DNS 记录的增删需要调用 DNS 服务商的 API,certbot 本身不支持国内 DNS 服务商的 API,所以需要自己写脚本来桥接。

Q5:多个域名能用同一个自动续期方案吗?

  • 第三方平台:每个证书独立生成续期命令,但可以部署在同一台服务器上,互不影响
  • Certbotcertbot renew一次性检查本机所有证书,但泛域名证书每个域名的 DNS hook 脚本可能不同
  • 云厂商:每张证书需要单独配置,且受20张年额度限制

七、总结

方案核心取舍
第三方平台配置简单,泛域名+自动续期,但依赖第三方服务
Certbot单域名续期成熟,但泛域名需自写DNS脚本,门槛高
云厂商托管省心,但收费且不支持泛域名

如果你不想折腾脚本和API签名,第三方平台的自动续期上手最快,但需要接受对第三方服务的依赖。

如果你是命令行高手,Certbot 的单域名方案足够可靠,但泛域名场景下的 hook 脚本开发会让大多数人望而却步。

如果你预算充足且域名少,云厂商的付费服务可以考虑,但20张年额度和不支持泛域名是硬伤。

归根到底,自动续期方案的选择取决于你的技术能力、域名规模和对第三方服务的接受程度。三种方案各有利弊,没有银弹,选适合自己的就好。


相关阅读

  • 《2026年免费SSL证书申请全攻略:5种方案对比》
  • 《申请SSL证书,如何完成域名验证》
  • 《Nginx/Tengine 服务器配置 SSL 证书》
  • 《Apache 服务器安装配置 SSL 证书》
http://www.jsqmd.com/news/793938/

相关文章:

  • 2026年,性价比超高的直播代运营供应商究竟哪家强?
  • 星际争霸、宝石塔的亮度差异、寻找食物储量
  • 终极指南:Awoo Installer - Nintendo Switch游戏安装的免费开源解决方案
  • STM32F4的DSP库怎么在CLion里用起来?保姆级CMake配置指南(含FPU开启)
  • 免费开源网盘直链下载工具:八大主流网盘完整使用指南
  • 不开刀、少痛苦!拱墅区这家公立肿瘤专科,中西医结合守护生命希望
  • ASL1架构规范语言:Arm处理器设计的核心工具
  • 结构型设计模式——组合模式
  • 报名CSGO/steam游戏搬砖项目前,这些内幕一定要了解
  • Taotoken Token Plan 套餐为高频用户带来的实际成本优化观察
  • 参考文献列表(近现代当代中国篇)
  • 如何用SketchUp STL插件轻松实现3D打印:从设计到实物的完整指南
  • OpenClaw + Claude Code 插件:多 Agent 协作开发,到底解决了什么,没解决什么?
  • 深度盘点2026广州个体户核定流程精选榜单:革新税务便捷申报新体验
  • TypeScript 泛型详解:定义、使用、特点优势、泛型约束与泛型数据类型
  • 软考分析师90天冲刺|DAY12·需求冲突处理策略
  • 聊聊我是怎么用Claude code来学习项目的吧
  • 隐藏在闲鱼暗网的暴利生意
  • Arm SME架构下的矩阵乘法优化实践
  • C++异步日志系统
  • Anaconda常用指令集
  • 家政派单小程序源头厂家
  • Ascend NPU高效无损压缩技术解析与优化
  • 启航 —— 二本NPC程序学习之路
  • 从零构建轻量级AI网关:统一管理多模型服务实战指南
  • JavaWeb应用项目开发学习心得:深耕技术体系,践行工程化开发,筑牢企业级Web开发根基
  • 当出海合规压力持续上升时,多云服务容易忽略哪些细节
  • 快图设计:5个理由告诉你为什么这款Vue图片编辑器值得尝试
  • 邮件定时群发系统 - 开源邮件营销平台 | 支持定时发送、联系人管理、数据追踪
  • GPU加速Zak-OTFS调制技术解析与工程实践