Skip to content

Conversation

@red-hat-konflux
Copy link
Contributor

@red-hat-konflux red-hat-konflux bot commented Nov 3, 2025

This PR contains the following updates:

Package Change Age Confidence
github.com/caddyserver/caddy/v2 v2.10.0-beta.2 -> v2.10.2 age confidence

Warning

Some dependencies could not be looked up. Check the warning logs for more information.


Release Notes

caddyserver/caddy (github.com/caddyserver/caddy/v2)

v2.10.2

Compare Source

This is a hotfix release to fix a couple critical issues from v2.10.1

What's Changed

Changelog

New Contributors

Full Changelog: caddyserver/caddy@v2.10.1...v2.10.2

v2.10.1

Compare Source

This is probably our biggest patch release ever -- not that lots of things were broken, but there's lots of refinement happening thanks to broader adoption and contributions from many more people. Just look at the New Contributors below!

Anyway, this release does contain some bug fixes and dependency upgrades which we hope will serve you well. Let us know if there's any issues! And thank you to all who contributed, especially our reliable maintainer team!

This version of Caddy requires Go v1.25.0 or newer.

What's Changed

Changelog

  • 44d078b acme_server: fix policy parsing in caddyfile (#​7006)
  • 320c572 admin: Make sure that any admin routers are provisioned when local/re… (#​6997)
  • 49dac61 bcrypt: add cost parameter to hash-password (#​7149)
  • 4bfc3b9 bcrypt: wrong cost flag name (#​7168)
  • 4b01d77 build(deps): bump github.com/cloudflare/circl from 1.6.0 to 1.6.1 (#​7058)
  • 45c9341 build(deps): bump golangci/golangci-lint-action from 6 to 8 (#​7044)
  • 5bc2afb build(deps): bump the actions-deps group with 6 updates (#​7142)
  • 007f406 build(deps): bump the all-updates group across 1 directory with 17 updates (#​7155)
  • 8524386 caddyhttp: Compare paths w/o wildcard if prefixes differ (#​7015)
  • 7590c9c caddyhttp: Free up quic listener when stopping (#​7177)
  • b15ed9b caddyhttp: refactor to use reflect.TypeFor (#​7187)
  • 14a63a2 caddyhttp: use the new http.Protocols to handle h1, h2 and h2c requests (#​6961)
  • 731e6c2 caddytls: Improve ECH error logging (close #​7152)
  • 105eee6 caddytls: Set local_ip, not remote_ip (#​6952)
  • b898873 caddytls: fix regression in external certificate manager support (#​7179)
  • 1481c04 caddytls: wire up client_auth leaf verifier Caddyfile (#​6772)
  • 19ff47a cmd: Allow caddy adapt to read from stdin (#​7163)
  • e633d01 cmd: fix Commands function not returning all registered commands (#​7059)
  • 7099892 core: Check for nil event origin (#​7047)
  • 3d0b4fa core: Clean up new config if it failed to run (#​7068)
  • 051e73a core: Replace admin server later in provisionContext (#​7004)
  • fe41ff3 core: Save app provisioning errors with context (#​7070)
  • e4447c4 core: Use KeepAliveConfig to pass keepalive_interval to listener's accepted sockets (#​7151)
  • b9710c6 fileserver: Add a few doc lines about Etag file content (#​7173)
  • 3b4d966 fileserver: Add sort buttons in grid mode (#​7089)
  • 54d03ce fileserver: Add support for .avif image format (#​6988)
  • 790f3e0 fileserver: denote license for embedded JavaScript for LibreJS (#​7127)
  • 94147ca fileserver: map invalid path errors to fs.ErrInvalid, and return 400 for any invalid path errors. (close #​7008) (#​7017)
  • 67debd0 fileserver: set Range header for precompressed static files to force Content Length header to appear (#​7042)
  • 89ed5f4 fix: Remove nil arg from zapslog.NewHandler call (#​6984)
  • 3723e89 go.mod: Upgrade CertMagic to v0.24.0
  • 3bd4135 go.mod: Upgrade dependencies
  • a6d488a go.mod: update quic-go to v0.51.0 (#​6972)
  • 11c6dae go.mod: update quic-go to v0.53.0 (#​7094)
  • bbf1dfc headers: Support placeholders in replacement search patterns (#​7117)
  • f11c780 http: clean up listeners if some of the listeners fail to bind (#​7176)
  • fdf6108 http: disable keepalive when KeepAliveInterval is negative (#​7158)
  • 5b727bd httpcaddyfile: Allow naked acme_dns if dns is set (fix #​7091)
  • 0badb07 httpcaddyfile: Fix generated config related to ACME global options
  • 092913a httpcaddyfile: Prevent error handler from overriding sub-handler matchers (#​6999)
  • 77dd12c httpcaddyfile: Validates TLS DNS challenge options (#​7099)
  • 0f209f6 httpcaddyfile: reject blocks in log_skip directive (#​7056)
  • 716d72e intercept: implement Unwrap for interceptedResponseHandler (#​7016)
  • 9f71483 log: default logger should respect {in,ex}clude (#​6995)
  • 33c88bd refactor: replace HasPrefix+TrimPrefix with CutPrefix (#​7095)
  • ab3b2d6 refactor: use slices.Equal to simplify code (#​7141)
  • 1c596e3 reverse_proxy: use the new KeepAliveConfig to set probe interval (#​7157)
  • aa3d20b reverseproxy: Use DialTLSContext if ServerName has placeholder (#​6955)
  • 737936c reverseproxy: reference correct field name in LoadModule (#​6978)
  • 1209b5c reverseproxy: validate versions in http transport (#​7112)

New Contributors

Full Changelog: caddyserver/caddy@v2.10.0...v2.10.1

v2.10.0

Compare Source

Caddy 2.10 is here! Aside from bug fixes, this release features:

  • Encrypted ClientHello (ECH): This new technology encrypts the last plaintext portion of a TLS connection: the ClientHello, which includes the domain name being connected to. The draft spec for ECH is almost finalized, so we can now support this privacy feature for TLS. This is a powerful but nuanced capability; we highly recommend reading the ECH documentation on our website.
  • Post-quantum (PQC) key exchange: Caddy now supports the standardized x25519mlkem768 cryptographic group by default.
  • ACME profiles: ACME profiles are an experimental draft that allow you to choose properties of your certificates with more flexibility than traditional CSR methods. For example, Let's Encrypt will issue 6-day certificates under a certain profile. Caddy may eventually use that profile by default.
  • Via header: The reverse proxy now sets a Via header instead of a duplicate Server header.
  • Global DNS provider: You can now specify a default "global" DNS module to use instead of having to configure it locally in every part of your config that requires a DNS provider (for example, ACME DNS challenges, and ECH). This is the dns global option in the Caddyfile, or in JSON config, it's the dns parameter in the tls app configuration.
  • Wildcards used by default: Previously, Caddy would obtain individual certificates for every domain in your config literally; now wildcards, if present, will be utilized for subdomains, rather than obtaining individual certificates. This change was motivated by the novel possibility for subdomain privacy afforded by ECH. It can be overridden with tls force_automate in the Caddyfile. The experimental auto_https prefer_wildcard option has been removed.
  • libdns 1.0 APIs: Many of you use DNS provider modules to solve ACME DNS challenges or to enable dynamic DNS. They implement interfaces defined by libdns to get, set, append, and delete DNS records. After 5 years of production experience, including lessons learned with ECH, libdns APIs have been updated and 1.0 beta has been tagged. DNS provider packages will need to update their code to be compatible, which will help ensure stability and well-defined semantics for the future. Several packages have already updated or are in the process of updating (cloudflare, rfc2136, and desec to name a few).
  • Global dns config: Now that several components of Caddy configuration may affect DNS records (ACME challenges, ECH publication, etc.), there is a new dns global option that can be used to specify your DNS provider config in a single place. This prevents repetition of credentials for servers where all the domains are managed by a single DNS provider.

Thank you to the many contributors who have helped to make this possible! 🎉 🥳 🍾

⚠️ While have traditionally supported the last 2 minor Go versions to accommodate some distribution / package manager policies, we now only support the latest minor Go version. The privacy and security benefits added in new Go versions (such as post-quantum cryptography) are worth making available to everyone as soon as possible, rather than holding back the entire user base or maintaining multiple code compilation configurations.

Encrypted ClientHello (ECH) details

(This is a brief overview. We recommend reading the full documentation.)

Typically, server names (domain names, or "SNI") are sent in the plaintext ClientHello when establishing TLS connections. With ECH, the true server name is encrypted (and wrapped) by an "outer" ClientHello which has a generic SNI of your choosing. With many sites on the same server sharing the same outer SNI, both clients and the server have more privacy related to domain names.

Caddy implements fully automated ECH, meaning that it generates (and soon, rotates), publishes, and serves ECH configurations simply by specifying a DNS provider, and the outer/public domain name to use.

Fully automated ECH requires a DNS module built into your Caddy binary. In order for a client, such as a browser, to know it can use ECH, and what parameters to use, the server's ECH configuration must be published. This config includes the public name, cryptographic parameters, and a public key for encrypting the inner ClientHello. By convention, browsers read the standardized HTTPS-type DNS record containing a ech SvcParamKey. Caddy sets this DNS record for all domains being protected, but it needs that DNS provider module plugged in and configured in order to do this. If you are already using the DNS ACME challenge, you should already have a DNS provider plugged in. If you prefer to build Caddy from source with a DNS module, it's easy with xcaddy, for example: $ xcaddy build --with github.com/caddy-dns/cloudflare

The minimum config needed to enable ClientHello is also the recommended config, as it maximizes privacy benefits in most situations. You just need the ech global option and a DNS provider specified. Here's an example using Cloudflare as the nameserver:

Caddyfile:

{
	debug  # not required; recommended while testing
	dns cloudflare {env.CLOUDFLARE_API_KEY}
	ech ech.example.net
}

example.com {
	respond "Hello there!"
}

This protects all your sites (example.com in this case) behind the public name of ech.example.net. (As another example, Cloudflare uses cloudflare-ech.com for all the sites it serves. We recommend choosing a single public domain and use it to protect all your sites.)

The outer/public name you choose should point to your server. Caddy will obtain a certificate for this name in order to facilitate safe, reliable connections for clients when needed. Without a certificate, clients may be forced to connect insecurely, or fail to connect at all, in some cases, which not only leaves them vulnerable, but also risks exposing the names of your server's sites.

Caddy then uses the specified DNS provider to publish the ECH config(s) for your various site names. It creates (or augments) HTTPS-type records for the domains of your sites (not your ECH public name). Note that DNS provider modules are independently-maintained, and may not have been tested for compatibility with HTTPS-type records. Please contact your module's maintainers if you experience issues.

If you have more advanced configuration needs, you can use the JSON configuration (more details coming soon; for now, see #​6862 or look at the source code; or use caddy adapt to convert a Caddyfile to JSON).

Testing and verifying Encrypted ClientHello

First make sure Caddy runs successfully with ECH enabled (and a DNS module) in the config. You should see logs that it is generating an ECH config and publishing it to your domain name(s).

You will need to use a client that supports ECH. Some custom builds of curl do, and Firefox and modern Chrome-based browsers do as well, but you need to enable DNS-over-HTTPS or DNS-over-TLS first (since, obviously, querying DNS in plaintext for a protected domain name will expose the domain and defeat the purpose of ECH).

If reusing an existing domain name, clear your DNS cache. Firefox has a way of doing this for its cache at about:networking#dns.

Once you have a suitable client, use Wireshark to capture network packets as you load your site. You should see only the outer/public name as SNI (ServerName Indicator) values in the packet capture. If at any time you see the true site name, ECH is not working properly -- it could be a client or server issue. Before filing a bug, please try to pinpoint it as a server issue first. But definitely report server bugs! Thank you!

(Note that ECH is not automatically published for CNAME'd domains, and the domain must already have a record in the zone.)

Commits

Beta 1:
Beta 2:
Beta 3:
  • b3e692e caddyfile: Fix formatting for backquote wrapped braces (#​6903)
  • 55c89cc caddytls: Convert AP subjects to punycode
  • 1f8dab5 caddytls: Don't publish ECH configs if other records don't exist
  • 782a3c7 caddytls: Don't publish HTTPS record for CNAME'd domain (fix #​6922)
  • 49f9af9 caddytls: Fix TrustedCACerts backwards compatibility (#​6889)
  • e276994 caddytls: Initialize permission module earlier (fix #​6901)
  • 39262f8 caddytls: Minor fixes for ECH
  • 1735730 core: add modular network_proxy support (#​6399)
  • 86c620f go.mod: Minor dependency upgrades
  • af2d33a headers: Allow nil HeaderOps (fix #​6893)
  • dccf3d8 requestbody: Add set option to replace request body (#​5795)
  • 2ac09fd requestbody: Fix ContentLength calculation after body replacement (#​6896)
v2.10.0:
  • f297bc0 admin: Remove host checking for UDS (close #​6832)
  • 0b2802f build(deps): bump golang.org/x/net from 0.37.0 to 0.38.0 (#​6960)
  • 5be77d0 caddyauth: Set authentication provider error in placeholder (#​6932)
  • b06a949 caddyhttp: Document side effect of HTTP/3 early data (close #​6936)
  • 35c8c2d caddytls: Add remote_ip to HTTP cert manager (close #​6952)
  • fb22a26 caddytls: Allow missing ECH meta file
  • 1bfa111 caddytls: Prefer managed wildcard certs over individual subdomain certs (#​6959)
  • ea77a9a caddytls: Temporarily treat "" and "@​" as equivalent for DNS publication
  • 5a6b2f8 events: Refactor; move Event into core, so core can emit events (#​6930)
  • 137711a go.mod: Upgrade acmez and certmagic
  • 9becf61 go.mod: Upgrade to libdns 1.0 beta APIs (requires upgraded DNS providers)
  • 6c38ae7 reverseproxy: Add valid Upstream to DialInfo in active health checks (#​6949)

What's Changed


Configuration

📅 Schedule: Branch creation - "before 8am on Monday" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

To execute skipped test pipelines write comment /ok-to-test.


Documentation

Find out how to configure dependency updates in MintMaker documentation or see all available configuration options in Renovate documentation.

Signed-off-by: red-hat-konflux <126015336+red-hat-konflux[bot]@users.noreply.github.com>
@red-hat-konflux
Copy link
Contributor Author

ℹ Artifact update notice

File name: go.mod

In order to perform the update(s) described in the table above, Renovate ran the go get command, which resulted in the following additional change(s):

  • 47 additional dependencies were updated
  • The go directive was updated for compatibility reasons

Details:

Package Change
go 1.24.0 -> 1.25
cel.dev/expr v0.19.1 -> v0.24.0
github.com/BurntSushi/toml v1.4.0 -> v1.5.0
github.com/alecthomas/chroma/v2 v2.15.0 -> v2.20.0
github.com/caddyserver/certmagic v0.22.0 -> v0.24.0
github.com/cloudflare/circl v1.6.0 -> v1.6.1
github.com/cpuguy83/go-md2man/v2 v2.0.6 -> v2.0.7
github.com/dlclark/regexp2 v1.11.4 -> v1.11.5
github.com/fxamacker/cbor/v2 v2.6.0 -> v2.8.0
github.com/go-chi/chi/v5 v5.2.1 -> v5.2.2
github.com/go-sql-driver/mysql v1.7.1 -> v1.8.1
github.com/google/cel-go v0.24.1 -> v0.26.0
github.com/google/go-tpm v0.9.0 -> v0.9.5
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 -> v2.27.1
github.com/huandu/xstrings v1.5.0 -> v1.5.0
github.com/klauspost/cpuid/v2 v2.2.10 -> v2.3.0
github.com/libdns/libdns v0.2.3 -> v1.1.0
github.com/mholt/acmez/v3 v3.1.0 -> v3.1.2
github.com/pires/go-proxyproto v0.7.1-0.20240628150027-b718e7ce4964 -> v0.8.1
github.com/prometheus/client_golang v1.21.1 -> v1.23.0
github.com/prometheus/client_model v0.6.1 -> v0.6.2
github.com/prometheus/common v0.63.0 -> v0.65.0
github.com/prometheus/procfs v0.15.1 -> v0.16.1
github.com/quic-go/quic-go v0.50.0 -> v0.54.0
github.com/rs/xid v1.5.0 -> v1.6.0
github.com/slackhq/nebula v1.6.1 -> v1.9.5
github.com/smallstep/certificates v0.26.1 -> v0.28.4
github.com/smallstep/go-attestation v0.4.4-0.20240109183208-413678f90935 -> v0.4.4-0.20241119153605-2306d5b464ca
github.com/spf13/pflag v1.0.6 -> v1.0.7
github.com/urfave/cli v1.22.14 -> v1.22.17
github.com/yuin/goldmark v1.7.8 -> v1.7.13
go.etcd.io/bbolt v1.3.9 -> v1.3.10
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 -> v0.61.0
go.opentelemetry.io/contrib/propagators/autoprop v0.42.0 -> v0.62.0
go.opentelemetry.io/contrib/propagators/aws v1.17.0 -> v1.37.0
go.opentelemetry.io/contrib/propagators/b3 v1.17.0 -> v1.37.0
go.opentelemetry.io/contrib/propagators/jaeger v1.17.0 -> v1.37.0
go.opentelemetry.io/contrib/propagators/ot v1.17.0 -> v1.37.0
go.opentelemetry.io/otel v1.34.0 -> v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 -> v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 -> v1.37.0
go.opentelemetry.io/otel/metric v1.34.0 -> v1.37.0
go.opentelemetry.io/otel/sdk v1.34.0 -> v1.37.0
go.opentelemetry.io/otel/trace v1.34.0 -> v1.37.0
go.opentelemetry.io/proto/otlp v1.3.1 -> v1.7.0
go.uber.org/mock v0.5.0 -> v0.5.2
golang.org/x/time v0.11.0 -> v0.12.0
google.golang.org/grpc v1.71.0 -> v1.73.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants