证书的签发与续期
面板保管你的服务使用的每一张 TLS 证书:节点上的入站和端点、面板自己的 HTTPS、隧道,以及插件。本页说明每张证书从哪里来、如何到达使用它的服务器,以及如何在不重启任何东西的情况下续期。管理证书见 证书。
证书类型
| 类型 | 由谁生成 | 续期 |
|---|---|---|
| 自签名 | 面板立即生成,不依赖任何外部方;有效期一年 | 由面板 |
| ACME | Let's Encrypt 等证书机构,在验证证明你控制该名称之后签发 | 由面板 |
| 上传 | 你自己,以 PEM 证书和私钥的形式提供 | 从不;请在到期前替换 |
REALITY 入站完全不需要证书:面板会生成它们的密钥。
由谁应答 ACME 验证
证书机构只在验证证明你控制该名称后才签发证书。面板决定由谁应答:
| 验证方式 | 应答方 | 适用条件 |
|---|---|---|
| dns-01 | 面板,通过你的 DNS 服务商的 API(Cloudflare、Alibaba Cloud DNS 或 acme-dns) | 始终适用,任何名称都可以,包括通配符和不指向你任何服务器的名称 |
| 由面板完成的 http-01、tls-alpn-01 | 面板所在的服务器 | 名称解析到面板所在的服务器,且那里的 80 或 443 端口空闲 |
| 由节点完成的三者中任意一种 | 在 由谁获取 中选择的节点 | 对 http-01 和 tls-alpn-01 而言,名称指向该节点 |
节点只负责应答验证。它获得的证书会交给面板,由面板像其他证书一样保存。
证书保存在哪里
- 在面板的数据库中,连同私钥。它们是每份备份的一部分,这也是应设置备份密码的又一个理由。
- 不在节点上。 节点在其配置中收到证书和私钥,保存在内存里,不在磁盘上保留任何证书。节点唯一存储的证书,是它与面板之间控制链路所用的自身身份证书。
- ACME 账户数据 也在数据库中,所以更换容器后它依然保留。
证书如何到达入站
入站或端点从三个来源之一获取证书,在 TLS 证书 中设置:它自己的(写在其配置中)、节点证书,或面板证书库中的一张。节点还可以有一张 兜底证书,用于其所有本来没有证书的 TLS 入站,包括证书文件在节点上缺失的入站。
面板把证书和私钥放进它为每个节点构建的配置中。更改入站使用的证书或为证书续期,都是对该入站的普通变更:节点只重建携带该证书的项目,不会重启任何东西。参见 无需重启的变更。
续期
面板每 6 小时检查一次它能续期的每张证书:
- 证书到期 的判断:到期前 30 天;签发时有效期不足 90 天的,则在其有效期的最后三分之一。
- 自签名证书 会重新生成;ACME 证书 会用最初签发时的验证方式重新获取。
- 每个使用它的节点 都会以实时变更的方式收到新证书。
- 续期失败时旧证书继续提供服务。 面板在下一次检查时重试,并发出
panel.cert_renew_failed;续期成功则发出panel.cert_renewed。
上传的证书永远不会续期。当它临近到期时,面板会发出 panel.cert_expiring,以便通知提醒你。
固定值随证书轮换
自签名证书无法通过证书机构校验,所以面板把它的固定值(pin,即该证书的精确指纹)写入用户的链接和配置文件。每次签发或续期证书时都会计算固定值。
自签名证书续期或重新签发时,其固定值会改变。应用在下一次刷新订阅时获得新的固定值;在此之前,它们会拒绝新证书。自签名证书有效期一年,所以这大约一年发生一次,按常规计划刷新的应用永远不会察觉。ACME 证书从不固定,所以它们的续期对应用没有任何影响。参见 从模板到链接。
面板自己的证书
设置向导会创建面板自己的 HTTPS 证书,默认为自签名,覆盖你列出的地址。
- 它跟随你的地址。 设置面板域名或订阅域名时会重新签发它,使其包含所有这些名称,包括通配符订阅域名。
- 它无需重启即可重新加载。 面板的网页服务器每 10 秒检查一次证书,发生变化时就切换到新证书。损坏的更新会被忽略,最后一张有效证书继续提供服务。
- 它可以被替换:换成证书库中的 ACME 证书或上传的证书,或你自己管理的磁盘证书文件。这时所有在用的名称都必须包含在证书中:证书未覆盖的域名会在应用中产生 TLS 错误。
面板只在你的地址变化时重写它自己保留的那张证书。你为面板选定的证书库中的证书永远不会被重写,因为它可能还在为客户端固定了它的入站提供服务。
隧道与插件的证书
- 使用 TLS 的隧道 会获得一张为隧道自身内部名称签发的自签名证书,有效期十年,由另一端固定。两端都是你自己的节点,所以既不用购买,也不用续期。
- 插件 可以从面板的证书库获取证书,由面板续期,插件每隔几分钟获取一次。对于位于其他服务器上的插件,只提供面板所在服务器没有参与验证的证书,面板自己的 HTTPS 证书则永远不提供。参见 插件平台。
