Skip to content

Commit

Permalink
Allow TLS minimum version to be configured
Browse files Browse the repository at this point in the history
Some environments have automated security scans that trigger
on TLS versions or insecure cipher suites. Setting TLS to 1.3
would solve both problems (setting to 1.2 only solves the former
as the default 1.2 cipher suites are insecure).

Default TLS minimum version of 1.0 remains.

Fixes kubernetes-sigs#1431
  • Loading branch information
willthames committed Jun 7, 2021
1 parent fca94d5 commit 4e0c31b
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions pkg/webhook/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,21 @@ type Server struct {
// Defaults to "", which means server does not verify client's certificate.
ClientCAName string

// TLSVersion is the minimum version of TLS supported. Accepts
// "1.1", "1.2" and "1.3" - anything else will result in "1.0"
TLSMinVersion string

// WebhookMux is the multiplexer that handles different webhooks.
WebhookMux *http.ServeMux

// webhooks keep track of all registered webhooks for dependency injection,
// and to provide better panic messages on duplicate webhook registration.
webhooks map[string]http.Handler

// tlsMinVersion is the result of the conversion from human-readable TLS version (for example "1.1")
// to the values accepted by tls.Config (for example 0x301)
tlsMinVersion uint16

// setFields allows injecting dependencies from an external source
setFields inject.Func

Expand Down Expand Up @@ -109,6 +117,17 @@ func (s *Server) setDefaults() {
if len(s.KeyName) == 0 {
s.KeyName = "tls.key"
}

switch s.TLSMinVersion {
case "1.1":
s.tlsMinVersion = tls.VersionTLS11
case "1.2":
s.tlsMinVersion = tls.VersionTLS12
case "1.3":
s.tlsMinVersion = tls.VersionTLS13
default:
s.tlsMinVersion = tls.VersionTLS10
}
}

// NeedLeaderElection implements the LeaderElectionRunnable interface, which indicates
Expand Down Expand Up @@ -200,6 +219,7 @@ func (s *Server) Start(ctx context.Context) error {
cfg := &tls.Config{
NextProtos: []string{"h2"},
GetCertificate: certWatcher.GetCertificate,
MinVersion: s.tlsMinVersion,
}

// load CA to verify client certificate
Expand Down

0 comments on commit 4e0c31b

Please sign in to comment.