Skip to content

Commit d1ffe18

Browse files
lspiehlerradek-ryckowski
authored andcommitted
Add the ability to specify the maximum acceptable TLS version (prometheus#414)
Signed-off-by: Lyas Spiehler <lspiehler@gmail.com>
1 parent ebec314 commit d1ffe18

10 files changed

+53
-0
lines changed

config/http_config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,7 @@ func NewTLSConfig(cfg *TLSConfig) (*tls.Config, error) {
779779
tlsConfig := &tls.Config{
780780
InsecureSkipVerify: cfg.InsecureSkipVerify,
781781
MinVersion: uint16(tls.VersionTLS10),
782+
MaxVersion: uint16(cfg.MaxVersion),
782783
}
783784

784785
// If a CA cert is provided then let's read it in so we can validate the
@@ -826,6 +827,8 @@ type TLSConfig struct {
826827
InsecureSkipVerify bool `yaml:"insecure_skip_verify" json:"insecure_skip_verify"`
827828
// Minimum TLS version.
828829
MinVersion TLSVersion `yaml:"min_version,omitempty" json:"min_version,omitempty"`
830+
// Maximum TLS version.
831+
MaxVersion TLSVersion `yaml:"max_version,omitempty" json:"max_version,omitempty"`
829832
}
830833

831834
// SetDirectory joins any relative file paths with dir.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{"max_version": "TLS11",
2+
"min_version": "TLS12"}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
max_version: TLS11
2+
min_version: TLS12
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{"max_version": "TLS12",
2+
"min_version": "TLS11"}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
max_version: TLS12
2+
min_version: TLS11
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{"max_version": "TLS12",
2+
"min_version": "TLS12"}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
max_version: TLS12
2+
min_version: TLS12
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"max_version": "TLS12"}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
max_version: TLS12

config/tls_config_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"os"
2121
"path/filepath"
2222
"reflect"
23+
"strings"
2324
"testing"
2425

2526
"encoding/json"
@@ -64,6 +65,9 @@ var expectedTLSConfigs = []struct {
6465
}, {
6566
filename: "tls_config.tlsversion.good.json",
6667
config: &tls.Config{MinVersion: tls.VersionTLS11},
68+
}, {
69+
filename: "tls_config.max_version.good.json",
70+
config: &tls.Config{MaxVersion: tls.VersionTLS12},
6771
},
6872
{
6973
filename: "tls_config.empty.good.yml",
@@ -74,6 +78,15 @@ var expectedTLSConfigs = []struct {
7478
}, {
7579
filename: "tls_config.tlsversion.good.yml",
7680
config: &tls.Config{MinVersion: tls.VersionTLS11},
81+
}, {
82+
filename: "tls_config.max_version.good.yml",
83+
config: &tls.Config{MaxVersion: tls.VersionTLS12},
84+
}, {
85+
filename: "tls_config.max_and_min_version.good.yml",
86+
config: &tls.Config{MaxVersion: tls.VersionTLS12, MinVersion: tls.VersionTLS11},
87+
}, {
88+
filename: "tls_config.max_and_min_version_same.good.yml",
89+
config: &tls.Config{MaxVersion: tls.VersionTLS12, MinVersion: tls.VersionTLS12},
7790
},
7891
}
7992

@@ -91,6 +104,29 @@ func TestValidTLSConfig(t *testing.T) {
91104
}
92105
}
93106

107+
var invalidTLSConfigs = []struct {
108+
filename string
109+
errMsg string
110+
}{
111+
{
112+
filename: "tls_config.max_and_min_version.bad.yml",
113+
errMsg: "tls_config.max_version must be greater than or equal to tls_config.min_version if both are specified",
114+
},
115+
}
116+
117+
func TestInvalidTLSConfig(t *testing.T) {
118+
for _, ee := range invalidTLSConfigs {
119+
_, err := LoadTLSConfig("testdata/" + ee.filename)
120+
if err == nil {
121+
t.Error("Expected error with config but got none")
122+
continue
123+
}
124+
if !strings.Contains(err.Error(), ee.errMsg) {
125+
t.Errorf("Expected error for invalid HTTP client configuration to contain %q but got: %s", ee.errMsg, err)
126+
}
127+
}
128+
}
129+
94130
func TestStringer(t *testing.T) {
95131
if s := (TLSVersion)(tls.VersionTLS13); s.String() != "TLS13" {
96132
t.Fatalf("tls.VersionTLS13 string should be TLS13, got %s", s.String())

0 commit comments

Comments
 (0)