Caddy

Caddy はオープンソースのHTTP/2に対応したWebサーバである。Caddy Webサーバ と呼ばれることもある。 
CaddyはGo言語で記述されており、HTTP機能にはGo標準ライブラリを使用している。 
Caddyの特徴的な機能の1つに、デフォルトでのHTTPSの有効化がある 。
開発者のマシュー・ホルト (Matthew Holt) はCaddyの開発を 2014年12月に開始した。そして2015年4月にリリースした。それから200人以上の開発者が加わりQUICのサポートを追加するなどして発展して来た。 
CaddyはさまざまなWeb技術をサポートしている。 
Caddyは、i386 / amd64 / ARM アーキテクチャに対応しており、多くのオペレーティングシステム (Windows / Mac / Linux / 各種BSD / Android / Plan 9) それぞれに向けて静的コンパイルされたバイナリの実行ファイルとして使用できる。 
特徴.
Caddyでは多数のWebサイト向け技術が利用できる。 
Caddyはリバースプロキシおよびロードバランサーとしても機能する。 
Caddyの機能のほとんどは、Goのライブラリ実装に由来する。しかしミドルウェアとして提供されている拡張機能もある。それらはCaddyfile（Caddyの構成に使用されるテキストファイル）からディレクティブで指定できる。 
機能の一覧
セキュリティ.
Caddyは広く知られた数多の CVE（脆弱性情報データベース）に関して安全である。ここには Heartbleed / DROWN / POODLE / BEASTなども含まれる。 さらにCaddyではTLS_FALLBACK_SCSVを使用することでプロトコルのダウングレード攻撃を防ぐこともできる。 
2015年6月2日に、バージョン0.7.1がリリースされた。これはCaddyのBasic認証ミドルウェアに対するタイミング攻撃の脆弱性に対してパッチを当てるためだった。
プロトコルおよび暗号スイートに関して、CaddyはTLS 1.0 - 1.2 使用し、且つ、AES-256 - GCM - SHA-384 よるECDHE - ECDSA（楕円曲線ディフィー・ヘルマン鍵共有 - 楕円曲線 DSA）を標準としている。ただし他の多くの暗号もサポートしている。CaddyはCloudflare も使用されており、実験的なTLS 1.3通信の提供が行われている。
C言語で記述された従来のプログラムに見られたような、まず完全な特権を与えてそれを必要に応じて段階的に絞って行くしくみは、Go 言語のプログラムでは特殊な方法でしか実現できないかもしくはまったく不可能である。
HTTPS通信の自動化.
Caddyは、適正なドメイン名（ACME プロトコル を介して TLS証明書を要求できるドメイン名）を持つサイトでは、デフォルトでHTTPS通信を有効化する。HTTPリクエストはHTTPSにリダイレクトされる。 
Caddyはサーバ起動時に、必要に応じて証明書を取得し、サーバ稼働中は証明書を更新し続ける。
デフォルトの認証局 Let's Encryptである。2016 年第 1 四半期に、CaddyはLet's Encryptが発行した証明書の約 2 % を占めていた。また、ユーザーは、対象とする ACME 認証局 をカスタマイズすることもできる。この機能はサーバ構成をテストする時に有用である。 
他の設定を採ることも可能である。「オンデマンドTLS」と呼ばれる機能である。この機能を用いると、Caddyは起動時ではなく TLSハンドシェイク時に、必要な場合にのみ証明書を取得する。この機能を有効にするには、ユーザーは、発行可能な証明書の最大数を指定する必要がある。オンデマンドTLS機能が有効な場合、Caddyは、まだ証明書が無いホスト名に対するリクエストを受け取ると、取得した証明書をメモリにキャッシュしてディスクに保存しながら、ACMEを介して新しい証明書を要求し、それをすぐに提供する。 通常、このプロセスには数秒掛かる。そのため転送ビットレートの制約は厳しくなる。 
TLS通信において、Caddyはセッションチケットキーを定期的に自動的にローテーションする。このことで転送する情報の完全な機密性を保持している。
テレメトリー.
バージョン0.11から、Caddyにテレメトリー機能が搭載された 。これは公式WebサイトからCaddyをダウンロードする場合はオプトイン（デフォルトで無効）となっている。一方、ソースからビルドする場合はオプトアウト（デフォルトで有効）である 。
影響.
CoreDNS.
Miek Giebenは Caddy WebサーバのフォークからCoreDNSを作成した。Caddyの単純な構成構文、プラグインアーキテクチャ、およびGo言語で記述されたコードが活用されている。