本页面介绍了 Caddy 全面的证书管理系统,包括基于 ACME 的证书颁发、自动化续订、存储机制以及与证书颁发机构的集成。该系统处理 TLS 证书从初始配置到续订和撤销的整个生命周期。
有关 TLS 连接策略和密码配置的信息,请参阅连接策略。有关自动 HTTPS 启用详情,请参阅自动 HTTPS。
Caddy 的证书管理围绕使用 ACME 协议的自动化证书生命周期管理构建。该系统与 CertMagic 库集成,可跨不同的证书颁发机构和挑战类型提供无缝的证书配置、续订和存储。
证书管理架构
来源:modules/caddytls/tls.go50-143 modules/caddytls/automation.go36-82 modules/caddytls/acmeissuer.go44-118
ACMEIssuer 是从与 ACME 兼容的证书颁发机构获取证书的主要机制。它实现了 ACME 协议 (RFC 8555) 并支持多种挑战验证方法。
ACME 证书颁发流程
ACME 颁发者配置包括几个关键组件
| 组件 | 目的 | 配置字段 |
|---|---|---|
| CA 目录 | ACME 服务器端点 | iss.CA |
| 账户密钥 | ACME 账户私钥 | iss.AccountKey |
| 外部账户绑定 | CA 提供的凭据 | iss.ExternalAccount |
| 挑战配置 | 挑战方法设置 | iss.Challenges |
| 证书生命周期 | 请求的证书有效期 | iss.CertificateLifetime |
来源:modules/caddytls/acmeissuer.go44-118 modules/caddytls/acmeissuer.go208-270 modules/caddytls/acmeissuer.go286-299
Caddy 支持所有三种标准 ACME 挑战类型,每种类型都有特定的配置选项和用例。
HTTP 挑战通过在特定 URL 路径提供令牌来验证域名所有权。
HTTP 挑战配置
来源:modules/caddytls/automation.go459-470 modules/caddytls/acmeissuer.go234-238
TLS-ALPN 挑战通过使用 acme-tls/1 ALPN 协议的特殊 TLS 握手来验证域名所有权。
TLS-ALPN 挑战流程
来源:modules/caddytls/automation.go472-483 modules/caddytls/acmeissuer.go239-242
DNS 挑战通过创建特定的 DNS TXT 记录来验证域名所有权。
DNS 挑战配置与流程
来源:modules/caddytls/automation.go485-516 modules/caddytls/acmeissuer.go243-245 modules/caddytls/acmeissuer.go152-183
自动化策略决定哪些证书被自动管理,以及它们在整个生命周期中如何被处理。
自动化策略架构
策略系统采用“首次匹配”方法,即应用第一个与证书主题匹配的策略
| 策略类型 | 目的 | 关键配置 |
|---|---|---|
| 默认公共 | 公共域名证书 | ACME 颁发者(Let's Encrypt, ZeroSSL) |
| 默认内部 | 内部/IP 证书 | 内部颁发者(自签名) |
| 自定义策略 | 特定域名配置 | 用户定义的颁发者和设置 |
来源:modules/caddytls/automation.go84-176 modules/caddytls/automation.go178-366 modules/caddytls/tls.go280-311
Caddy 使用两层存储系统,其中内存缓存由持久存储支持。
证书存储架构
证书缓存提供以下几个关键功能
来源:modules/caddytls/tls.go188-212 modules/caddytls/tls.go244-267 modules/caddytls/tls.go665-703
证书续订通过 CertMagic 的续订机制自动处理,具有可配置的间隔和续订窗口。
证书生命周期管理
关键生命周期管理间隔和设置
| 组件 | 默认间隔 | 配置字段 |
|---|---|---|
| 续订检查 | 10 分钟 | RenewCheckInterval |
| OCSP 检查 | 1 小时 | OCSPCheckInterval |
| 存储清理 | 24 小时 | StorageCleanInterval |
| 续订窗口 | 证书生命周期的 1/3 | RenewalWindowRatio |
来源:modules/caddytls/automation.go55-78 modules/caddytls/tls.go424-443 modules/caddytls/tls.go665-703
Caddy 通过标准化接口和提供商特定优化与多个证书颁发机构集成。
证书颁发机构集成
特殊集成功能
来源:modules/caddytls/acmeissuer.go258-267 modules/caddytls/acmeissuer.go314-372 modules/caddytls/automation.go402-428
按需 TLS 允许在 TLS 握手期间为以前未知的域名颁发证书,并具有可配置的权限控制。
按需 TLS 安全架构
按需 TLS 需要仔细的安全配置以防止滥用
| 安全控制 | 目的 | 实现 |
|---|---|---|
| 权限模块 | 验证证书请求 | OnDemandPermission 接口 |
| 通配符保护 | 防止不受限制的通配符颁发 | 策略验证 |
| 仅限管理器模式 | 限制为外部证书管理器 | hadExplicitManagers 检查 |
| 请求日志记录 | 跟踪证书请求模式 | 远程 IP 日志记录 |
来源:modules/caddytls/automation.go264-333 modules/caddytls/tls.go270-279 modules/caddytls/ondemand.go (在 automation.go 中引用)