Skip to content

Commit

Permalink
Add support for MaxVersion in tls.Options
Browse files Browse the repository at this point in the history
  • Loading branch information
kmeekva authored and traefiker committed Oct 29, 2019
1 parent 5f8fb6c commit 1f39083
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 0 deletions.
51 changes: 51 additions & 0 deletions docs/content/https/tls.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,57 @@ spec:
minVersion: VersionTLS13
```

### Maximum TLS Version

We discourages the use of this setting to disable TLS1.3.

The right approach is to update the clients to support TLS1.3.

```toml tab="File (TOML)"
# Dynamic configuration

[tls.options]

[tls.options.default]
maxVersion = "VersionTLS13"

[tls.options.maxtls12]
maxVersion = "VersionTLS12"
```

```yaml tab="File (YAML)"
# Dynamic configuration

tls:
options:
default:
maxVersion: VersionTLS13

maxtls12:
maxVersion: VersionTLS12
```

```yaml tab="Kubernetes"
apiVersion: traefik.containo.us/v1alpha1
kind: TLSOption
metadata:
name: default
namespace: default

spec:
maxVersion: VersionTLS13

---
apiVersion: traefik.containo.us/v1alpha1
kind: TLSOption
metadata:
name: maxtls12
namespace: default

spec:
maxVersion: VersionTLS12
```

### Cipher Suites

See [cipherSuites](https://godoc.org/crypto/tls#pkg-constants) for more information.
Expand Down
2 changes: 2 additions & 0 deletions docs/content/reference/dynamic-configuration/file.toml
Original file line number Diff line number Diff line change
Expand Up @@ -318,13 +318,15 @@
[tls.options]
[tls.options.Options0]
minVersion = "foobar"
maxVersion = "foobar"
cipherSuites = ["foobar", "foobar"]
sniStrict = true
[tls.options.Options0.clientAuth]
caFiles = ["foobar", "foobar"]
clientAuthType = "foobar"
[tls.options.Options1]
minVersion = "foobar"
maxVersion = "foobar"
cipherSuites = ["foobar", "foobar"]
sniStrict = true
[tls.options.Options1.clientAuth]
Expand Down
2 changes: 2 additions & 0 deletions docs/content/reference/dynamic-configuration/file.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,7 @@ tls:
options:
Options0:
minVersion: foobar
maxVersion: foobar
cipherSuites:
- foobar
- foobar
Expand All @@ -360,6 +361,7 @@ tls:
sniStrict: true
Options1:
minVersion: foobar
maxVersion: foobar
cipherSuites:
- foobar
- foobar
Expand Down
1 change: 1 addition & 0 deletions pkg/provider/kubernetes/crd/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,7 @@ func buildTLSOptions(ctx context.Context, client Client) map[string]tls.Options

tlsOptions[makeID(tlsOption.Namespace, tlsOption.Name)] = tls.Options{
MinVersion: tlsOption.Spec.MinVersion,
MaxVersion: tlsOption.Spec.MaxVersion,
CipherSuites: tlsOption.Spec.CipherSuites,
ClientAuth: tls.ClientAuth{
CAFiles: clientCAs,
Expand Down
1 change: 1 addition & 0 deletions pkg/provider/kubernetes/crd/traefik/v1alpha1/tlsoption.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ type TLSOption struct {
// TLSOptionSpec configures TLS for an entry point
type TLSOptionSpec struct {
MinVersion string `json:"minVersion,omitempty"`
MaxVersion string `json:"maxVersion,omitempty"`
CipherSuites []string `json:"cipherSuites,omitempty"`
ClientAuth ClientAuth `json:"clientAuth,omitempty"`
SniStrict bool `json:"sniStrict,omitempty"`
Expand Down
8 changes: 8 additions & 0 deletions pkg/tls/certificate.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ var (
`VersionTLS13`: tls.VersionTLS13,
}

// MaxVersion Map of allowed TLS minimum versions
MaxVersion = map[string]uint16{
`VersionTLS10`: tls.VersionTLS10,
`VersionTLS11`: tls.VersionTLS11,
`VersionTLS12`: tls.VersionTLS12,
`VersionTLS13`: tls.VersionTLS13,
}

// CipherSuites Map of TLS CipherSuites from crypto/tls
// Available CipherSuites defined at https://golang.org/pkg/crypto/tls/#pkg-constants
CipherSuites = map[string]uint16{
Expand Down
1 change: 1 addition & 0 deletions pkg/tls/tls.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ type ClientAuth struct {
// Options configures TLS for an entry point
type Options struct {
MinVersion string `json:"minVersion,omitempty" toml:"minVersion,omitempty" yaml:"minVersion,omitempty" export:"true"`
MaxVersion string `json:"maxVersion,omitempty" toml:"maxVersion,omitempty" yaml:"maxVersion,omitempty" export:"true"`
CipherSuites []string `json:"cipherSuites,omitempty" toml:"cipherSuites,omitempty" yaml:"cipherSuites,omitempty"`
ClientAuth ClientAuth `json:"clientAuth,omitempty" toml:"clientAuth,omitempty" yaml:"clientAuth,omitempty"`
SniStrict bool `json:"sniStrict,omitempty" toml:"sniStrict,omitempty" yaml:"sniStrict,omitempty" export:"true"`
Expand Down
6 changes: 6 additions & 0 deletions pkg/tls/tlsmanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,12 @@ func buildTLSConfig(tlsOption Options) (*tls.Config, error) {
conf.MinVersion = minConst
}

// Set the maximum TLS version if set in the config TOML
if maxConst, exists := MaxVersion[tlsOption.MaxVersion]; exists {
conf.PreferServerCipherSuites = true
conf.MaxVersion = maxConst
}

// Set the list of CipherSuites if set in the config TOML
if tlsOption.CipherSuites != nil {
// if our list of CipherSuites is defined in the entryPoint config, we can re-initialize the suites list as empty
Expand Down

0 comments on commit 1f39083

Please sign in to comment.