Skip to content

域名证书 ​

域名证书功能通过 ACME 协议自动申请和续期 SSL/TLS 证书,支持 Let's Encrypt 和 ZeroSSL,使用 DNS 验证方式,无需开放 80/443 端口。

技术原理 ​

SSL/TLS 证书与 HTTPS ​

SSL/TLS 证书是 HTTPS 安全通信的基础,它通过非对称加密建立安全连接:

客户端                          服务器
  │                               │
  │──── ClientHello ─────────────→│
  │←─── ServerHello + 证书 ───────│
  │     (验证证书合法性)            │
  │──── 生成会话密钥 ─────────────→│
  │←─── 加密通信开始 ──────────────│

证书链说明:

  • 根证书(Root CA):浏览器内置信任的顶级证书颁发机构
  • 中间证书(Intermediate CA):由根 CA 签发,用于签发终端证书
  • 终端证书(End-entity):你的域名证书,由中间 CA 签发

ACME 协议原理 ​

ACME(Automatic Certificate Management Environment)是 Let's Encrypt 使用的自动化证书管理协议:

NetPanel                    ACME 服务器(Let's Encrypt)
   │                                │
   │──── 申请证书(域名列表)────────→│
   │←─── 下发验证挑战(Challenge)───│
   │                                │
   │  [DNS-01 验证]                  │
   │──── 调用 DNS API 添加 TXT 记录 ──→ DNS 服务商
   │──── 通知验证完成 ───────────────→│
   │←─── 验证通过,颁发证书 ──────────│
   │                                │
   │──── 自动删除 TXT 记录 ──────────→ DNS 服务商

DNS-01 vs HTTP-01 验证方式对比 ​

对比项DNS-01 验证HTTP-01 验证
验证方式在 DNS 中添加 TXT 记录在 Web 服务器放置验证文件
端口要求无需开放任何端口需要开放 80 端口
通配符证书✅ 支持❌ 不支持
自动化程度需要 DNS API需要 Web 服务器配合
适用场景内网服务、无公网端口已有 Web 服务器
NetPanel 支持✅ 主要方式❌ 不支持

NetPanel 使用 DNS-01 验证

NetPanel 采用 DNS-01 验证方式,无需开放 80/443 端口,特别适合家庭内网环境。只需配置 DNS 服务商的 API 密钥即可全自动完成证书申请和续期。


功能概述 ​

  • 自动申请免费 SSL 证书(Let's Encrypt / ZeroSSL)
  • 使用 DNS-01 验证,无需开放 HTTP 端口
  • 证书到期前自动续期
  • 申请的证书可供 Caddy 等功能使用
  • 支持通配符证书(*.example.com)

工作原理 ​

DNS-01 验证流程:

  1. ACME 服务器要求在域名的 DNS 中添加特定 TXT 记录
  2. NetPanel 自动调用 DNS 服务商 API 添加该记录
  3. ACME 服务器验证 TXT 记录,验证通过后颁发证书
  4. NetPanel 自动删除临时 TXT 记录

前置条件 ​

使用域名证书功能前,需要先在 域名账号 页面配置对应服务商的 API 密钥,用于自动添加 DNS 验证记录。


配置说明 ​

进入 域名证书 页面,点击 新建 按钮:

字段类型必填默认值说明
名称字符串✅—证书名称
域名字符串✅—申请证书的域名,多个用换行分隔
域名账号选择✅—用于 DNS 验证的域名账号
CA 服务商枚举✅Let's Encrypt证书颁发机构
邮箱字符串✅—用于接收证书到期提醒
自动续期布尔❌true证书到期前自动续期
续期提前天数整数❌30提前多少天开始续期

CA 服务商说明 ​

服务商说明限制
Let's Encrypt最广泛使用的免费 CA每周每域名限 50 张
ZeroSSL另一家免费 CA,可作为备选需要注册账号
Let's Encrypt (Staging)测试环境,不受速率限制证书不被浏览器信任

配置示例 ​

申请单域名证书 ​

字段值
名称example.com 证书
域名example.com
域名账号选择阿里云账号
CA 服务商Let's Encrypt
邮箱admin@example.com

申请通配符证书 ​

通配符证书(*.example.com)可以覆盖所有一级子域名,只有 DNS-01 验证方式才支持通配符证书。

字段值
名称通配符证书
域名*.example.com(第一行)
example.com(第二行)
域名账号选择 Cloudflare 账号
CA 服务商Let's Encrypt
邮箱admin@example.com

通配符证书说明

  • *.example.com 覆盖:www.example.com、app.example.com、api.example.com 等
  • *.example.com 不覆盖:example.com(根域名)、a.b.example.com(二级子域名)
  • 建议同时申请 *.example.com 和 example.com 两个域名

申请多域名证书(SAN) ​

一张证书覆盖多个不同域名:

字段值
名称多域名证书
域名example.com
www.example.com
api.example.com

证书管理 ​

查看证书状态 ​

在证书列表中,每张证书会显示:

  • 到期时间:证书的有效期截止日期
  • 状态:有效 / 即将到期 / 已过期 / 申请中 / 申请失败
  • 证书路径:证书文件在服务器上的存储路径

手动续期 ​

点击证书右侧的 续期 按钮,可立即触发证书续期,无需等待自动续期。

在 Caddy 中使用证书 ​

申请成功的证书可以在 Caddy 网站服务 中直接选择使用,无需手动配置证书路径。


常见问题排查 ​

Q:证书申请失败,提示 DNS 验证失败? ​

原因: DNS TXT 记录未及时传播,ACME 服务器验证时未能查询到记录。

解决步骤:

  1. 检查域名账号的 API 密钥是否正确,权限是否包含 DNS 编辑
  2. 手动查询 TXT 记录是否已添加:
    bash
    nslookup -type=TXT _acme-challenge.example.com 8.8.8.8
  3. 等待 DNS 传播(通常 1-5 分钟),然后重试
  4. 检查域名是否在该账号下管理(非其他账号)

Q:提示"too many certificates already issued"? ​

原因: 触发了 Let's Encrypt 的速率限制(每周同一域名最多 50 张证书)。

解决方案:

  1. 等待速率限制重置(每周一重置)
  2. 测试阶段使用 Let's Encrypt Staging 环境
  3. 申请通配符证书代替多张单域名证书

Q:证书申请成功,但浏览器仍提示不安全? ​

可能原因:

  1. 证书未正确配置到 Web 服务器(检查 Caddy 配置)
  2. 使用了 Staging 环境证书(不被浏览器信任)
  3. 证书域名与访问域名不匹配

Q:自动续期失败怎么办? ​

排查步骤:

  1. 检查 DNS 服务商 API 密钥是否过期或被撤销
  2. 查看系统日志中的续期错误信息
  3. 手动点击 续期 按钮触发续期
  4. 确认域名 DNS 解析仍由该账号管理

注意事项 ​

速率限制

Let's Encrypt 对同一域名有速率限制(每周最多 50 张证书)。测试时建议使用 Let's Encrypt Staging 环境,避免触发限制。

DNS 传播等待

DNS-01 验证需要等待 DNS 记录传播。如果申请失败,可能是 DNS 传播延迟导致,稍后重试即可。

证书存储位置

证书文件默认存储在数据目录的 certs/ 子目录下,格式为 PEM 文件(cert.pem 和 key.pem)。

基于 GPL-3.0 许可证发布