TLS 系统为 Caddy 提供了全面的 TLS 功能,包括自动证书管理、连接策略执行和高级安全功能。该系统处理从证书配置和续订到连接处理和协议协商的 TLS 配置的所有方面。
有关 TLS 与 HTTP 服务器集成的更多信息,请参阅 HTTP 服务器。有关特定证书颁发者和自动化策略的详细信息,请参阅 证书管理。
TLS 系统围绕核心的 TLS 应用构建,该应用协调证书管理、连接策略以及与其他 Caddy 组件的集成。
来源: modules/caddytls/tls.go50-143 modules/caddytls/automation.go36-82 modules/caddytls/connpolicy.go44-47
TLS 结构体作为 Caddy 中所有 TLS 功能的中心协调点。它管理证书缓存、自动化策略和连接策略。
TLS 应用通过共享的 certCache 全局变量与 CertMagic 协调底层证书管理。
| 字段 | 类型 | 目的 |
|---|---|---|
CertificatesRaw | caddy.ModuleMap | 证书加载器模块 |
自动化 | *AutomationConfig | 证书自动化策略 |
SessionTickets | *SessionTicketService | 会话票证密钥轮换 |
缓存 | *CertCacheOptions | 证书缓存配置 |
EncryptedClientHello | *ECH | ECH 配置 |
来源: modules/caddytls/tls.go50-143 modules/caddytls/tls.go153-359 modules/caddytls/tls.go393-431
证书管理通过自动化策略和与 CertMagic 库配合使用的颁发者来处理。
| 源类型 | 实现 | 用途 |
|---|---|---|
| ACME | ACMEIssuer | 来自 Let's Encrypt、ZeroSSL 等的公共证书。 |
| 内部信息 | InternalIssuer | 用于内部使用的自签名证书 |
| 手动 | CertificateLoader | 从文件加载的预存在证书 |
Manage() 方法按自动化策略对主题进行分组,以便有效地批量处理证书请求
来源: modules/caddytls/tls.go523-581 modules/caddytls/automation.go178-366 modules/caddytls/acmeissuer.go44-118
连接策略决定了基于 ClientHello 信息传入连接的 TLS 配置。
buildStandardTLSConfig() 方法使用以下内容创建 Go 标准库 tls.Config
GetCertificate 回调进行证书选择来源: modules/caddytls/connpolicy.go96-190 modules/caddytls/connpolicy.go278-443
HTTP 应用与 TLS 系统集成,为符合条件的域名自动启用 HTTPS 和管理证书。
| 域名类型 | 标准 | 颁发者 |
|---|---|---|
| 内部信息 | IP 地址、localhost、内部域名 | InternalIssuer |
| Tailscale | *.ts.net 域名 | tailscaleIssuer |
| 公开 | 符合条件的公共域名 | ACMEIssuer(Let's Encrypt、ZeroSSL) |
来源: modules/caddyhttp/autohttps.go77-448 modules/caddyhttp/autohttps.go489-600
ECH 通过加密 ClientHello 来保护 TLS 握手过程中的服务器名称。
SessionTicketService 提供会话票证加密密钥 (STEKs) 的自动轮换
来源: modules/caddytls/ech.go30-78 modules/caddytls/ech.go428-513 modules/caddytls/connpolicy.go332-345
TLS 系统使用 Caddy 的存储接口并维护一个全局证书缓存
| 组件 | 目的 |
|---|---|
certCache | 用于证书的全局 CertMagic 缓存 |
echConfigsKey | ECH 配置的存储路径 |
| 存储锁 | Caddy 实例之间的协调 |
缓存可在 TLS 握手期间提供自动证书续订、OCSP 装订和高效的证书查找。
来源: modules/caddytls/tls.go45-48 modules/caddytls/tls.go206-212 modules/caddytls/ech.go100-109