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.comapp.example.comapi.example.com
  • *.example.com 不覆盖example.com(根域名)、a.b.example.com(二级子域名)
  • 建议同时申请 *.example.comexample.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.pemkey.pem)。

基于 GPL-3.0 许可证发布