跳转到内容

Caddy

维基百科,自由的百科全书

这是本页的一个历史版本,由73.189.118.215留言2018年6月23日 (六) 22:16 安全编辑。这可能和当前版本存在着巨大的差异。

Caddy
原作者Matthew Holt
首次发布2015年4月28日,​9年前​(2015-04-28
当前版本0.10.14(2018年4月20日,​6年前​(2018-04-20
源代码库 編輯維基數據鏈接
编程语言Go[1]
操作系统AndroidBSD variantsLinuxOS XWindows
类型Web服务器, 反向代理服务器
许可协议Apache 2
网站官方网站 在维基数据上编辑此内容

Caddy服务器(或稱Caddy Web)是一个开源的,使用 Golang 编写,支持 HTTP/2 的 Web 服务端。它使用 Golang 标准库提供 HTTP 功能。

Caddy 一个显著的特性是默认启用 HTTPS[2][3]它是第一个无需额外配置即可提供 HTTPS 特性的 Web 服务器。[4]

作者 Matt Holt 于 2014 年 12 月开始开发 Caddy ,并于 2015 年 4 月发布第一个版本。[5] 在发布后的一年里,它的下载量超过了 20000 次,并在 GitHub 上获得了 4500 关注。[6]

Caddy 支持各种 Web 技术,提供静态编译的二进制文件,支持 i386amd64ARM 架构上的 WindowsMacLinuxAndroidBSD 操作系统。

功能

Caddy 可以提供各种网站技术,它也可以作为反向代理和负载均衡器。Caddy 的大部分功能都实现为中间件,并通过 Caddyfile 中的指令(用于配置 Caddy 的文本文件)进行控制。[7]

  • HTTP/1.1 (原始的HTTP) and HTTP/2 (HTTPS的推荐连接方案)
  • HTTPS, 同时接受自动签发和手动管理
    • TLS 1.2 临时性支持(旧协议)[8]
    • SNI
    • OCSP 证书交换验证
  • 虚拟主机 (多个站点工作在单个端口上)[9]
  • 原生 IPv4 和 IPv6 支持
  • 静态文件分发
  • 平滑重启/重载
  • 反向代理 ( HTTP 或 WebSockets)
  • 负载均衡和健康性检查
  • FastCGI 支持[10][11]
  • 配置文件模板
  • Markdown 渲染
  • CGI 通过 WebSockets
  • Gzip 压缩
  • 简单服务器鉴权
  • URL 重写
  • 重定向
  • 文件浏览服务
  • 访问日志
  • 实验性 QUIC 支持

安全

Caddy 免于很多已知的 CVEs 攻击 (包括 Heartbleed, DROWN, POODLE, 和 BEAST[12],另外, Caddy 使用 TLS_FALLBACK_SCSV 以防止协议降级攻击。

2015 年 6 月 2 日,版本 0.7.1 修复了 Caddy 简单服务器鉴权中间件中时间欺诈攻击的漏洞。[13]

关于协议和密码套件,Caddy 使用 TLS 1.0-1.2,并且倾向于 ECDHE ECDSA 与 AES256-GCM-SHA384,支持十几种不同的加密方式。Cloudflare 已经使用了 Caddy 作为 TLS 1.3 的实现方案。[14]

传统的特权降级无法工作在 Golang 程序上。[15] 为了绑定低于 1024 的端口, Caddy 必须使用 root 账户运行 (不建议) 或通过 setcap 给予低位端口使用权限 (建议的) 。 并且,在将来的版本中会尝试使用非特级子进程运行。[16]

Caddy 没有自动启动 HTTP Strict Transport Security,推荐通过 Caddy 的 header 配置启用 HSTS。[17]

自动签发 HTTPS

Caddy 默认通过检查域名来启用 HTTPS (通过 ACME protocol 检查域名并签发证书), 并且重定向 HTTP 请求到 HTTPS。[18] 它在启动期间根据需要签发证书,并在服务器的使用期间自动重签发。 Let's Encrypt 是默认的证书颁发机构,但用户可以自定义所使用的 ACME CA,这在测试配置时是必要的。在 2016 年第一季度, 有百分之二的 Let's Encrypt 证书是由 Caddy 签发的。[19]

一个可选的配置允许 Caddy 在需要时签发一个证书 "按需 TLS"[20] 使用这种方案时,用户必须指定可通过该方案配置的证书数量。 当 Caddy 收到一个没有配置证书的请求时, 它会自动通过 ACME 签发并配置, 然后将证书存储于内存和硬盘。 这个过程通常需要几秒钟的时间,并且受到限制。

当使用 TLS, Caddy 会自动切换会话密钥以保证安全性。[21]

參考資料

  1. ^ Gerrand, Andrew. Go 1.6 is released. golang.org. 17 February 2016 [5 March 2016]. 
  2. ^ Johnson, Brad. A Better Web Server with Free SSL. 23 February 2016 [5 March 2016]. 
  3. ^ Automatic HTTPS with Caddy Server. 18 December 2015 [5 March 2016]. 
  4. ^ Dmitry Chestnykh [@dchest]. Caddy is the first general-purpose web server to default to HTTPS without user intervention (using Let's Encrypt) (推文). 17 December 2015 –通过Twitter. 
  5. ^ Show HN: Caddy, a cross-platform HTTP/2 web server. 28 April 2015. 
  6. ^ Is Caddy Free?
  7. ^ The Caddyfile. [29 February 2016]. 
  8. ^ tls - Caddy Directives. [8 March 2016]. 
  9. ^ Benedetti, Benoit. Caddy, Le Serveur Web Facile [Caddy, The Easy Web Server]. GNU/Linux Magazine France (France). November 2015 (法语). 
  10. ^ How to Setup the Caddy Web Server with php-fpm. 
  11. ^ Beke, Mathias. Caddy Server and WordPress (PHP-FPM). 21 August 2015. 
  12. ^ SSL Server Test: caddyserver.com (Powered by Qualys SSL Labs). [5 March 2016]. 
  13. ^ Release 0.7.1 · mholt/caddy. 2 June 2015. 
  14. ^ Nick Sullivan [@grittygrease]. It's built in Go using custom versions @rlbarnes's Mint and @mholt6's Caddy (推文). 4 Mar 2016 –通过Twitter. 
  15. ^ syscall: Setuid/Setgid doesn't apply to all threads on Linux. 21 January 2011 [5 March 2016]. 
  16. ^ Implement privilege de-escalation. 21 January 2016. 
  17. ^ HTTP Strict Transport Security. [8 March 2016]. 
  18. ^ Automatic HTTPS. [5 March 2016]. 
  19. ^ 空引用 (帮助) 
  20. ^ On-Demand TLS. [5 March 2016]. 
  21. ^ Springall, Drew; Durumeric, Zakir; Halderman, J. Alex. Measuring the Security Harm of TLS Crypto Shortcuts. Proceedings of the 2016 ACM on Internet Measurement Conference. IMC '16 (New York, NY, USA: ACM). 2016-01-01: 33–47. ISBN 9781450345262. doi:10.1145/2987443.2987480. 

外部連結