自动 HTTPS 是 Caddy 的一项旗舰功能,它能够以零配置实现安全网站。本文档解释了 Caddy 如何自动提供 TLS 证书、配置安全的 TLS 设置以及创建 HTTP 到 HTTPS 的重定向,而无需任何手动设置。
Caddy 的自动 HTTPS 默认应用这些功能
来源:modules/caddyhttp/autohttps.go1-70 modules/caddyhttp/app.go41-49 modules/caddytls/tls.go49-68
Caddy 在服务器配置过程中通过一个两阶段过程来实现自动 HTTPS
在由 automaticHTTPSPhase1() 处理的初始阶段
来源:modules/caddyhttp/autohttps.go82-599
在第二阶段,即 TLS 应用启动时
来源:modules/caddytls/tls.go384-421 modules/caddytls/automation.go178-349
Caddy 通过检查您的配置自动发现需要证书的域名。该过程如下所示
example.com),Caddy 会检查它是否符合证书管理条件如果满足以下条件,域名就有资格进行自动证书管理
Skip 或 SkipCerts 列表中certmagic.SubjectQualifiesForPublicCert() 返回 true(检查有效的公共域名)IgnoreLoadedCerts 设置为 true)来源:modules/caddyhttp/autohttps.go145-198 modules/caddyhttp/autohttps.go220-246
Caddy 自动配置从 HTTP 到 HTTPS 的重定向,除非禁用
例如,请求 http://example.com/page?query=value 将被重定向到 https://example.com/page?query=value。
HTTP 到 HTTPS 的重定向是通过一个特殊的重定向路由实现的,该路由会插入到 HTTP 服务器路由列表中的一个精心选择的位置。该位置通过检查现有的主机匹配器来确定,以确保重定向能够适当优先。
来源:modules/caddyhttp/autohttps.go255-441 modules/caddyhttp/app.go437-509
Caddy 使用多个组件来管理证书
来源:modules/caddytls/tls.go50-140 modules/caddytls/automation.go36-176 modules/caddytls/acmeissuer.go44-118 modules/caddytls/automation.go236-242
Caddy 为不同场景提供了多种证书颁发者
| 颁发者 | 描述 | 默认用途 |
|---|---|---|
| ACME | 使用 ACME 协议(Let's Encrypt)颁发公共证书 | 公共域名的默认选项 |
| ZeroSSL | 使用 ZeroSSL 的 ACME 颁发公共证书 | 公共域名的替代选项 |
| 内部信息 | 为本地开发颁发自签名证书 | 非公共域名的默认选项 |
对于每个域名,Caddy 根据域名类型和配置的自动化策略选择合适的颁发者。
来源:modules/caddytls/acmeissuer.go44-118 modules/caddytls/automation.go236-242
您可以完全禁用自动 HTTPS 或其特定方面
要仅禁用重定向或仅禁用证书管理
来源:modules/caddyhttp/autohttps.go31-43
您可以豁免特定域名不使用自动 HTTPS
skip 列表会从证书管理和 HTTP 到 HTTPS 重定向中排除域名,而 skip_certificates 只从证书管理中排除。
来源:modules/caddyhttp/autohttps.go50-59
ignore_loaded_certificates: 强制 Caddy 管理证书,即使它们已经加载prefer_wildcard: 如果通配符和特定域名都可用,则优先使用通配符来源:modules/caddyhttp/autohttps.go60-73
按需 TLS 允许 Caddy 在 TLS 握手期间而非启动时获取证书。这在以下情况很有用
来源:modules/caddytls/automation.go38-54 modules/caddytls/automation.go139-142
Caddy 在以下阶段实现自动 HTTPS
第一阶段(automaticHTTPSPhase1):在配置开始时发生
证书加载:在 TLS 应用启动时发生
来源: modules/caddyhttp/autohttps.go82-87 modules/caddytls/tls.go384-402
当未定义特定的自动化策略时,Caddy 会创建默认策略
这确保所有域名都能获得适当的证书管理,无需任何配置。
来源: modules/caddytls/automation.go280-301
未颁发证书
HTTP 到 HTTPS 重定向不起作用
disable_redirects: true)证书续订失败
来源: modules/caddyhttp/autohttps.gomodules/caddyhttp/autohttps.go389-402
caddy validate 命令检查您的配置caddy run --config config.json --debug有关 TLS 配置的更多信息,请参阅