JavaDog程序狗
发布于 2026-08-17 / 1 阅读
0
0

【实操】证书到期不用慌:1Panel + 阿里云 DNS 自动续签 SSL 证书

大家好,我是狗哥。

网站跑得好好的,浏览器突然甩出一个“连接不安全”,老板在群里艾特你,用户顺手问候你——定睛一看,SSL 证书过期了。

证书过期后半夜上岗的狗哥

证书平时安静得像不存在,过期时却专挑你下班后刷存在感。手动续签一次不难,难的是隔一段时间就得惦记它。狗哥记性一般,所以这种重复活,坚决交给机器。

这篇文章用 1Panel + 阿里云 DNS + Let's Encrypt 把证书申请和续签串起来。配置完成后,1Panel 会在证书临近到期时尝试自动续签,不需要每次手工添加 DNS 解析记录。

下面把 RAM 用户、DNS 账户、证书申请、HTTPS 配置和结果验证完整跑一遍。哪些地方可以直接照做,哪些地方得留个心眼,狗哥都标出来了。

本文界面来自当前实操截图。1Panel 和阿里云控制台更新后,按钮名称或位置可能略有变化,请以实际页面为准。

先说适用范围

狗哥这次拿 javadog.net 实操:网站由 1Panel 管理,DNS 托管在阿里云,证书由 Let's Encrypt 签发。你的环境也是这套组合,基本可以顺着往下做,单域名、多域名和泛域名都能走 DNS 验证。

如果域名不在阿里云,后面的 DNS 账户类型要跟着换。证书还经过 CDN、负载均衡或其他代理,也要去真正终止 TLS 的入口检查,不能只盯着 1Panel。公司如果禁用长期 AccessKey,或者对 RAM 权限有硬性要求,就按内部规范来,别拿教程跟安全制度硬碰硬。

一、自动续签,到底谁在干活

这套方案走 DNS 验证。1Panel 调用阿里云 DNS API 写入 ACME 验证记录,Let's Encrypt 校验通过后签发证书,1Panel 再把证书保存下来。临近到期时,这套流程重新跑一遍。

流程

狗哥先泼盆冷水: “自动续签”只是开关,不是赛博护身符。链路中的账户、权限、网络或域名托管关系发生变化,续签都可能失败。

ACME 账户得能用,AccessKey 不能失效,RAM 权限不能被收回,服务器还得正常访问外部接口。哪一环掉链子,开关再蓝也没用。

按 1Panel 官方文档的说明,通过 DNS 账户或 HTTP 验证申请的证书可以开启自动续签;手动 DNS 验证和手动上传的证书不具备同样的自动续签条件。

二、准备条件

开始前先确认:

  • 已安装并可登录 1Panel;
  • 域名 DNS 托管在阿里云;
  • 可在阿里云 RAM 中创建用户、授权并创建 AccessKey;
  • 1Panel 服务器可访问公网;
  • 准备一个接收 ACME 通知的邮箱。

顺手记下当前 1Panel 版本。后续如果界面入口不同,先确认是不是版本差异。

三、创建专用 RAM 用户

先说最重要的一句:不要把阿里云主账号 AccessKey 填进 1Panel。

主账号凭据默认权限过大,一旦泄露,攻击者拿到的可不只是改 DNS 的权限。为了续个证书,把整个云账号暴露在风险里,这买卖怎么看都血亏。

进入阿里云 RAM 访问控制 → 身份管理 → 用户,创建一个只给 1Panel 使用的 RAM 用户。狗哥这里直接取名 1panel-dns,以后查权限和轮换密钥一眼就知道它是干什么的。

  • 登录名称和显示名称:1panel-dns
  • 访问方式:使用 AccessKey 调用 API
  • 控制台登录:不需要

创建 1Panel 专用 RAM 用户

添加 DNS 权限

选中刚创建的用户,点击 新增授权,搜索并添加 AliyunDNSFullAccess

为 RAM 用户添加阿里云 DNS 权限

AliyunDNSFullAccess 是阿里云提供的系统策略,策略内容包含 alidns:*,即对云解析 DNS 的完整操作权限。它配置简单,但不是严格的最小权限。

狗哥建议: 教程使用官方系统策略,目的是快速验证链路。正式生产环境如果域名多、环境复杂,应由管理员评估自定义策略和来源 IP 限制。要分清“能跑”和“该怎么安全地跑”。

创建 AccessKey

进入该 RAM 用户的凭证管理页面,创建 AccessKey,并立即保存:

  • AccessKey ID
  • AccessKey Secret

Secret 只在创建时显示一次。妥善保存,但不要把它放进文章截图、代码仓库、聊天记录或公开日志里。

四、在 1Panel 创建 ACME 账户

登录 1Panel,进入 网站 → 证书 → ACME 账户,点击 创建。截图里的入口就在证书页面顶部,不用去系统设置里翻半天。

进入 1Panel ACME 账户管理

填写:

  • 邮箱:用于 ACME 账户和证书相关通知;
  • 账号类型:Let's Encrypt
  • 密钥算法:EC 256

EC 256RSA 2048 都很常见。没有兼容旧客户端的特殊需求,使用界面默认值即可;截图中选择的是 EC 256

五、创建阿里云 DNS 账户

返回证书页面,进入 DNS 账户 → 创建。名称是自己看的,狗哥填的是 阿里云DNS;类型选阿里云,再把刚才的 AccessKey 填进去。

创建 1Panel 阿里云 DNS 账户

这里的 Access key 对应 AccessKey ID,Secret key 对应 AccessKey Secret,别被两边大小写不同的字段名绕进去。

确认保存。如果提示认证失败,按顺序检查 AccessKey 是否复制完整、RAM 权限是否生效,以及服务器能否访问阿里云 API。多数问题都出在这三处。

六、申请证书并开启自动续签

进入 网站 → 证书 → 申请证书

申请证书并开启自动续签

依次配置:

  • 主域名:例如 example.com
  • 其他域名:例如 www.example.com,按需填写;
  • ACME 账户:选择前面创建的 Let's Encrypt 账户;
  • 验证方式:选择 DNS 账号
  • DNS 账号:选择前面创建的阿里云 DNS 账户;
  • 自动续签:一定要勾选

狗哥提醒: 这个开关才是今天的主角。前面忙活半天,最后忘了勾它,就像火锅底料、肉和菜全买齐了,回家发现没开火。

确认后等待任务执行。不要把固定的“1~3 分钟”当成承诺:DNS 解析传播、接口响应和网络状态都会影响耗时,最终以证书列表状态和任务日志为准。

狗哥这次申请的是 javadog.net。申请完成后,列表里能看到申请方式为 DNS 账号、状态为正常,自动续签开关也已经打开:

证书申请结果与自动续签状态

证书申请已经成功,但先别急着庆祝:证书躺在面板里,不等于网站已经用上它。

七、让网站使用新证书

进入 网站 → 网站列表 → 对应网站 → HTTPS。狗哥这里选择的是刚申请的 javadog.net 证书:

  1. 打开 HTTPS;
  2. 选择刚申请的证书;
  3. 确认网站访问正常后,再按需开启强制 HTTPS;
  4. 保存配置。

为网站选择证书并配置 HTTPS

开启强制 HTTPS 前,先确认页面资源、接口地址和回调地址都支持 HTTPS,避免旧的 HTTP 资源造成混合内容或回调失败。

强制 HTTPS 要不要开

情况建议
新站,所有资源均已使用 HTTPS可以开启
老站仍有 HTTP 图片、接口或回调先整改再开启
前面还有 CDN 或负载均衡先确认入口层的 HTTPS 和回源策略

新站通常可以直接开,老站先扫一遍 HTTP 图片、接口和回调地址。证书本身没问题,支付回调却被强制跳转打断,这类故障并不少见,没必要主动往身上揽。

八、验证线上证书

看到“申请成功”就关页面,是很多事故的经典开场。面板显示成功,不代表用户访问到的一定是新证书。更稳妥的做法是从面板、客户端和任务日志三个位置交叉确认。

1. 检查面板状态

先看域名范围、状态、到期时间和自动续签开关。本文截图中,DNS 账号申请的 javadog.net 状态正常,续签开关为开启;下面那张手动创建的旧证书开关是关闭的,正好能看出区别。

2. 检查线上实际证书

在可访问网站的机器上执行:

echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

example.com 换成自己的域名,重点检查 notAfter。这里查到的才是用户实际访问到的证书,不只是 1Panel 里保存的文件。

3. 检查任务日志

续签失败先看证书日志或任务日志,别反复点申请碰运气。常见原因无非下面几类:

现象优先检查
AccessKey 认证失败AccessKey 是否禁用、删除、复制错误
DNS 操作无权限RAM 用户的 DNS 权限是否被移除
域名验证超时DNS 托管账户、解析传播和网络状态
续签成功但浏览器仍显示旧证书网站、CDN、负载均衡或反向代理是否加载了新证书
自动续签没有执行证书列表开关、证书申请方式及任务日志

可选:做一次人工续签演练

1Panel 提供手动触发申请/续签的入口。首次配置完成后,可在维护窗口触发一次,看看 DNS 凭据、权限和部署链路是否通畅。

偶尔手动触发一次,相当于给自动化做消防演习,免得到期时才发现 AccessKey 早已失效。

九、面板自身使用 HTTPS 时的处理

如果 1Panel 面板本身也使用这张证书,续签后仍然展示旧证书,可以在确认当前版本支持“申请证书后执行脚本”的前提下,配置延迟重启:

systemd-run --on-active=30s /usr/bin/1pctl restart all

1Panel 官方命令行文档确认 1pctl restart all 用于重启 1Panel 服务;但“证书申请后执行脚本”的入口和执行权限可能随版本变化,建议先在维护窗口手动验证,不要直接在生产环境盲配。

十、安全收尾:自动化不是撒手不管

证书会自动续,AccessKey 可不会自动变安全。后续还得管好这几件事:

  • AccessKey 仅交给专用 RAM 用户使用;
  • 不使用阿里云主账号 AccessKey;
  • 能限制来源 IP 时尽量限制;
  • 定期检查 AccessKey 最近使用时间和权限;
  • 怀疑泄露时立即禁用并轮换;
  • 不在截图、日志和仓库中暴露 Secret。

发布前再扫一眼证书域名、自动续签开关和线上到期时间。如果前面挂着 CDN 或负载均衡,也去入口层确认一次。几分钟的检查,比证书过期后在群里解释省事得多。

配置到这儿,1Panel、阿里云 DNS 和 Let's Encrypt 的续签链路就通了。

自动续签开启后安心摸鱼

以后证书续签这种重复活,就让机器自己卷。咱们定期看看任务日志、检查线上到期时间,别等浏览器替你报警。

狗哥只留一句:开关亮着不代表续签一定成功,任务日志和线上证书的到期时间才算数。

参考资料


评论