Skip to content

Commit e66040a

Browse files
authored
caddytls: set server name in context (#6324)
Set the requested server name in a context value for CertGetter implementations to use. Pass ctx to tscert.GetCertificateWithContext. Signed-off-by: Will Norris <[email protected]>
1 parent 4486048 commit e66040a

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ require (
2626
github.com/spf13/cobra v1.8.0
2727
github.com/spf13/pflag v1.0.5
2828
github.com/stretchr/testify v1.9.0
29-
github.com/tailscale/tscert v0.0.0-20230806124524-28a91b69a046
29+
github.com/tailscale/tscert v0.0.0-20240517230440-bbccfbf48933
3030
github.com/yuin/goldmark v1.7.1
3131
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
3232
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,8 +410,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
410410
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
411411
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
412412
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
413-
github.com/tailscale/tscert v0.0.0-20230806124524-28a91b69a046 h1:8rUlviSVOEe7TMk7W0gIPrW8MqEzYfZHpsNWSf8s2vg=
414-
github.com/tailscale/tscert v0.0.0-20230806124524-28a91b69a046/go.mod h1:kNGUQ3VESx3VZwRwA9MSCUegIl6+saPL8Noq82ozCaU=
413+
github.com/tailscale/tscert v0.0.0-20240517230440-bbccfbf48933 h1:pV0H+XIvFoP7pl1MRtyPXh5hqoxB5I7snOtTHgrn6HU=
414+
github.com/tailscale/tscert v0.0.0-20240517230440-bbccfbf48933/go.mod h1:kNGUQ3VESx3VZwRwA9MSCUegIl6+saPL8Noq82ozCaU=
415415
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
416416
github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk=
417417
github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA=

modules/caddytls/certmanagers.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ func init() {
2222
caddy.RegisterModule(HTTPCertGetter{})
2323
}
2424

25+
// For referencing the requested SNI server name.
26+
const ClientHelloSNICtxKey caddy.CtxKey = "client_hello_sni"
27+
2528
// Tailscale is a module that can get certificates from the local Tailscale process.
2629
type Tailscale struct {
2730
logger *zap.Logger
@@ -41,14 +44,15 @@ func (ts *Tailscale) Provision(ctx caddy.Context) error {
4144
}
4245

4346
func (ts Tailscale) GetCertificate(ctx context.Context, hello *tls.ClientHelloInfo) (*tls.Certificate, error) {
47+
ctx = context.WithValue(ctx, ClientHelloSNICtxKey, hello.ServerName)
4448
canGetCert, err := ts.canHazCertificate(ctx, hello)
4549
if err == nil && !canGetCert {
4650
return nil, nil // pass-thru: Tailscale can't offer a cert for this name
4751
}
4852
if err != nil {
4953
ts.logger.Warn("could not get status; will try to get certificate anyway", zap.Error(err))
5054
}
51-
return tscert.GetCertificate(hello)
55+
return tscert.GetCertificateWithContext(ctx, hello)
5256
}
5357

5458
// canHazCertificate returns true if Tailscale reports it can get a certificate for the given ClientHello.

0 commit comments

Comments
 (0)