菜单

TLS 系统

相关源文件

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 应用结构

TLS 结构体作为 Caddy 中所有 TLS 功能的中心协调点。它管理证书缓存、自动化策略和连接策略。

TLS 应用生命周期

TLS 应用通过共享的 certCache 全局变量与 CertMagic 协调底层证书管理。

字段类型目的
CertificatesRawcaddy.ModuleMap证书加载器模块
自动化*AutomationConfig证书自动化策略
SessionTickets*SessionTicketService会话票证密钥轮换
缓存*CertCacheOptions证书缓存配置
EncryptedClientHello*ECHECH 配置

来源: modules/caddytls/tls.go50-143 modules/caddytls/tls.go153-359 modules/caddytls/tls.go393-431

证书管理系统

证书管理通过自动化策略和与 CertMagic 库配合使用的颁发者来处理。

自动化策略解析

证书来源

源类型实现用途
ACMEACMEIssuer来自 Let's Encrypt、ZeroSSL 等的公共证书。
内部信息InternalIssuer用于内部使用的自签名证书
手动CertificateLoader从文件加载的预存在证书

Manage() 方法按自动化策略对主题进行分组,以便有效地批量处理证书请求

来源: modules/caddytls/tls.go523-581 modules/caddytls/automation.go178-366 modules/caddytls/acmeissuer.go44-118

连接策略

连接策略决定了基于 ClientHello 信息传入连接的 TLS 配置。

策略匹配和 TLS 配置生成

连接策略配置

buildStandardTLSConfig() 方法使用以下内容创建 Go 标准库 tls.Config

  • 通过 GetCertificate 回调进行证书选择
  • 密码套件和曲线首选项
  • 客户端身份验证设置
  • 会话票证配置
  • ALPN 协议协商

来源: modules/caddytls/connpolicy.go96-190 modules/caddytls/connpolicy.go278-443

自动 HTTPS 集成

HTTP 应用与 TLS 系统集成,为符合条件的域名自动启用 HTTPS 和管理证书。

自动 HTTPS 第一阶段流程

域名分类逻辑

域名类型标准颁发者
内部信息IP 地址、localhost、内部域名InternalIssuer
Tailscale*.ts.net 域名tailscaleIssuer
公开符合条件的公共域名ACMEIssuer(Let's Encrypt、ZeroSSL)

来源: modules/caddyhttp/autohttps.go77-448 modules/caddyhttp/autohttps.go489-600

高级 TLS 功能

加密客户端 Hello (ECH)

ECH 通过加密 ClientHello 来保护 TLS 握手过程中的服务器名称。

会话票证管理

SessionTicketService 提供会话票证加密密钥 (STEKs) 的自动轮换

  • 可配置的轮换间隔和最大票证生命周期
  • 多个活动密钥用于平滑轮换
  • 与 TLS 连接策略集成

来源: modules/caddytls/ech.go30-78 modules/caddytls/ech.go428-513 modules/caddytls/connpolicy.go332-345

存储和缓存

TLS 系统使用 Caddy 的存储接口并维护一个全局证书缓存

组件目的
certCache用于证书的全局 CertMagic 缓存
echConfigsKeyECH 配置的存储路径
存储锁Caddy 实例之间的协调

缓存可在 TLS 握手期间提供自动证书续订、OCSP 装订和高效的证书查找。

来源: modules/caddytls/tls.go45-48 modules/caddytls/tls.go206-212 modules/caddytls/ech.go100-109