Caddy
Caddy服务器(或称Caddy Web)是一个开源的,使用 Golang 编写,支持 HTTP/2 的 Web 服务端。它使用 Golang 标准库提供 HTTP 功能。
原作者 | Matthew Holt |
---|---|
初始版本 | 2015年4月28日 |
穩定版本 | 2.2.3 (2020年12月14日 ) |
源代码库 | |
编程语言 | Go |
操作系统 | Android,BSD variants,Linux,OS X及Windows |
类型 | Web服务器, 反向代理服务器 |
许可协议 | Apache许可证2.0 |
网站 | 官方网站 |
Caddy 一个显著的特性是默认启用 HTTPS。[1][2]它是第一个无需额外配置即可提供 HTTPS 特性的 Web 服务器。[3]
作者 Matt Holt 于 2014 年 12 月开始开发 Caddy ,并于 2015 年 4 月发布第一个版本。[4] 在发布后的一年里,它的下载量超过了 20000 次,并在 GitHub 上获得了 4500 关注。[5]
Caddy 支持各种 Web 技术,提供静态编译的二进制文件,支持 i386、amd64 和 ARM 架构上的 Windows、Mac、Linux、Android 和 BSD 操作系统。
功能
Caddy 可以提供各种网站技术,它也可以作为反向代理和负载均衡器。Caddy 的大部分功能都以中间件的形式实现,并通过 Caddyfile 中的指令(用于配置 Caddy 的文本文件)进行控制。[6]
安全
Caddy 免于很多已知的 CVEs 攻击 (包括 Heartbleed, DROWN, POODLE, 和 BEAST)[11],另外, Caddy 使用 TLS_FALLBACK_SCSV 以防止协议降级攻击。
2015 年 6 月 2 日,版本 0.7.1 修复了 Caddy 简单服务器鉴权中间件中时间欺诈攻击的漏洞。[12]
关于协议和密码套件,Caddy 使用 TLS 1.0-1.2,并且倾向于 ECDHE ECDSA 与 AES256-GCM-SHA384,支持十几种不同的加密方式。Cloudflare 已经使用了 Caddy 作为 TLS 1.3 的实现方案。[13]
传统的特权降级无法工作在 Golang 程序上。[14] 为了绑定低于 1024 的端口, Caddy 必须使用 root 账户运行 (不建议) 或通过 setcap
给予低位端口使用权限 (建议的) 。 并且,在将来的版本中会尝试使用非特级子进程运行。[15]
Caddy 没有自动启动 HTTP Strict Transport Security,推荐通过 Caddy 的 header
配置启用 HSTS。[16]
自动签发 HTTPS
Caddy 默认通过检查域名来启用 HTTPS (通过 ACME protocol 检查域名并签发证书), 并且重定向 HTTP 请求到 HTTPS。[17] 它在启动期间根据需要签发证书,并在服务器的使用期间自动重签发。 Let's Encrypt 是默认的证书颁发机构,但用户可以自定义所使用的 ACME CA,这在测试配置时是必要的。在 2016 年第一季度, 有百分之二的 Let's Encrypt 证书是由 Caddy 签发的。
一个可选的配置允许 Caddy 在需要时签发一个证书 "按需 TLS"[18] 使用这种方案时,用户必须指定可通过该方案配置的证书数量。 当 Caddy 收到一个没有配置证书的请求时, 它会自动通过 ACME 签发并配置, 然后将证书存储于内存和硬盘。 这个过程通常需要几秒钟的时间,并且受到限制。
当使用 TLS, Caddy 会自动切换会话密钥以保证安全性。[19]
參考資料
- Johnson, Brad. . 23 February 2016 [5 March 2016]. (原始内容存档于2017-08-02).
- . 18 December 2015 [5 March 2016]. (原始内容存档于2017-08-02).
- Dmitry Chestnykh [@dchest]. (推文). 17 December 2015 –Twitter.
- . 28 April 2015 [2017-04-03]. (原始内容存档于2017-04-22).
- . [2017-04-03]. (原始内容存档于2017-04-22).
- . [29 February 2016]. (原始内容存档于2017-04-20).
- . [8 March 2016]. (原始内容存档于2017-03-17).
- Benedetti, Benoit. [Caddy, The Easy Web Server]. GNU/Linux Magazine France (France). November 2015 (法语).
- . [2017-04-03]. (原始内容存档于2017-08-18).
- Beke, Mathias. . 21 August 2015 [2017-04-03]. (原始内容存档于2016-05-03).
- . [5 March 2016].
- . 2 June 2015 [2017-04-03]. (原始内容存档于2019-02-15).
- Nick Sullivan [@grittygrease]. (推文). 4 Mar 2016 –Twitter.
- . 21 January 2011 [5 March 2016]. (原始内容存档于2018-02-07).
- . 21 January 2016 [2017-04-03]. (原始内容存档于2017-04-22).
- . [8 March 2016]. (原始内容存档于2017-04-26).
- . [5 March 2016]. (原始内容存档于2017-03-17).
- . [5 March 2016]. (原始内容存档于2017-03-17).
- Springall, Drew; Durumeric, Zakir; Halderman, J. Alex. . 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.