mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 18:48:08 +00:00 
			
		
		
		
	enabling TLS 1.3 support for TCP listeners (#8305)
* adding support for TLS 1.3 for TCP listeners * removed test as CI uses go 1.12 * removed Cassandra support, added deprecation notice * re-added TestTCPListener_tls13
This commit is contained in:
		 Gerardo Di Giacomo
					Gerardo Di Giacomo
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							d27374e5ca
						
					
				
				
					commit
					0e8c6c2171
				
			| @@ -41,6 +41,7 @@ set, this is automatically set to true`, | |||||||
| effect if a CA certificate is provided`, | effect if a CA certificate is provided`, | ||||||
| 			}, | 			}, | ||||||
|  |  | ||||||
|  | 			// TLS 1.3 is not supported as this engine is deprecated. Please switch to the Cassandra database secrets engine | ||||||
| 			"tls_min_version": &framework.FieldSchema{ | 			"tls_min_version": &framework.FieldSchema{ | ||||||
| 				Type:        framework.TypeString, | 				Type:        framework.TypeString, | ||||||
| 				Default:     "tls12", | 				Default:     "tls12", | ||||||
|   | |||||||
| @@ -113,3 +113,88 @@ func TestTCPListener_tls(t *testing.T) { | |||||||
|  |  | ||||||
| 	testListenerImpl(t, ln, connFn(false), "foo.example.com") | 	testListenerImpl(t, ln, connFn(false), "foo.example.com") | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestTCPListener_tls13(t *testing.T) { | ||||||
|  | 	wd, _ := os.Getwd() | ||||||
|  | 	wd += "/test-fixtures/reload/" | ||||||
|  |  | ||||||
|  | 	td, err := ioutil.TempDir("", fmt.Sprintf("vault-test-%d", rand.New(rand.NewSource(time.Now().Unix())).Int63())) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	defer os.RemoveAll(td) | ||||||
|  |  | ||||||
|  | 	// Setup initial certs | ||||||
|  | 	inBytes, _ := ioutil.ReadFile(wd + "reload_ca.pem") | ||||||
|  | 	certPool := x509.NewCertPool() | ||||||
|  | 	ok := certPool.AppendCertsFromPEM(inBytes) | ||||||
|  | 	if !ok { | ||||||
|  | 		t.Fatal("not ok when appending CA cert") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	ln, _, _, err := tcpListenerFactory(map[string]interface{}{ | ||||||
|  | 		"address":                            "127.0.0.1:0", | ||||||
|  | 		"tls_cert_file":                      wd + "reload_foo.pem", | ||||||
|  | 		"tls_key_file":                       wd + "reload_foo.key", | ||||||
|  | 		"tls_require_and_verify_client_cert": "true", | ||||||
|  | 		"tls_client_ca_file":                 wd + "reload_ca.pem", | ||||||
|  | 		"tls_min_version":                    "tls13", | ||||||
|  | 	}, nil, cli.NewMockUi()) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("err: %s", err) | ||||||
|  | 	} | ||||||
|  | 	cwd, _ := os.Getwd() | ||||||
|  |  | ||||||
|  | 	clientCert, _ := tls.LoadX509KeyPair( | ||||||
|  | 		cwd+"/test-fixtures/reload/reload_foo.pem", | ||||||
|  | 		cwd+"/test-fixtures/reload/reload_foo.key") | ||||||
|  |  | ||||||
|  | 	connFn := func(clientCerts bool) func(net.Listener) (net.Conn, error) { | ||||||
|  | 		return func(lnReal net.Listener) (net.Conn, error) { | ||||||
|  | 			conf := &tls.Config{ | ||||||
|  | 				RootCAs: certPool, | ||||||
|  | 			} | ||||||
|  | 			if clientCerts { | ||||||
|  | 				conf.Certificates = []tls.Certificate{clientCert} | ||||||
|  | 			} | ||||||
|  | 			conn, err := tls.Dial("tcp", ln.Addr().String(), conf) | ||||||
|  |  | ||||||
|  | 			if err != nil { | ||||||
|  | 				return nil, err | ||||||
|  | 			} | ||||||
|  | 			if err = conn.Handshake(); err != nil { | ||||||
|  | 				return nil, err | ||||||
|  | 			} | ||||||
|  | 			return conn, nil | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	testListenerImpl(t, ln, connFn(true), "foo.example.com") | ||||||
|  |  | ||||||
|  | 	ln, _, _, err = tcpListenerFactory(map[string]interface{}{ | ||||||
|  | 		"address":                            "127.0.0.1:0", | ||||||
|  | 		"tls_cert_file":                      wd + "reload_foo.pem", | ||||||
|  | 		"tls_key_file":                       wd + "reload_foo.key", | ||||||
|  | 		"tls_require_and_verify_client_cert": "true", | ||||||
|  | 		"tls_disable_client_certs":           "true", | ||||||
|  | 		"tls_client_ca_file":                 wd + "reload_ca.pem", | ||||||
|  | 		"tls_min_version":                    "tls13", | ||||||
|  | 	}, nil, cli.NewMockUi()) | ||||||
|  | 	if err == nil { | ||||||
|  | 		t.Fatal("expected error due to mutually exclusive client cert options") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	ln, _, _, err = tcpListenerFactory(map[string]interface{}{ | ||||||
|  | 		"address":                  "127.0.0.1:0", | ||||||
|  | 		"tls_cert_file":            wd + "reload_foo.pem", | ||||||
|  | 		"tls_key_file":             wd + "reload_foo.key", | ||||||
|  | 		"tls_disable_client_certs": "true", | ||||||
|  | 		"tls_client_ca_file":       wd + "reload_ca.pem", | ||||||
|  | 		"tls_min_version":          "tls13", | ||||||
|  | 	}, nil, cli.NewMockUi()) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("err: %s", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	testListenerImpl(t, ln, connFn(false), "foo.example.com") | ||||||
|  | } | ||||||
|   | |||||||
| @@ -217,8 +217,10 @@ func setupCassandraTLS(conf map[string]string, cluster *gocql.ClusterConfig) err | |||||||
| 			tlsConfig.MinVersion = tls.VersionTLS11 | 			tlsConfig.MinVersion = tls.VersionTLS11 | ||||||
| 		case "tls12": | 		case "tls12": | ||||||
| 			tlsConfig.MinVersion = tls.VersionTLS12 | 			tlsConfig.MinVersion = tls.VersionTLS12 | ||||||
|  | 		case "tls13": | ||||||
|  | 			tlsConfig.MinVersion = tls.VersionTLS13 | ||||||
| 		default: | 		default: | ||||||
| 			return fmt.Errorf("'tls_min_version' must be one of `tls10`, `tls11` or `tls12`") | 			return fmt.Errorf("'tls_min_version' must be one of `tls10`, `tls11`, `tls12` or `tls13`") | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -134,21 +134,21 @@ Default: cn`, | |||||||
| 		"tls_min_version": { | 		"tls_min_version": { | ||||||
| 			Type:        framework.TypeString, | 			Type:        framework.TypeString, | ||||||
| 			Default:     "tls12", | 			Default:     "tls12", | ||||||
| 			Description: "Minimum TLS version to use. Accepted values are 'tls10', 'tls11' or 'tls12'. Defaults to 'tls12'", | 			Description: "Minimum TLS version to use. Accepted values are 'tls10', 'tls11', 'tls12' or 'tls13'. Defaults to 'tls12'", | ||||||
| 			DisplayAttrs: &framework.DisplayAttributes{ | 			DisplayAttrs: &framework.DisplayAttributes{ | ||||||
| 				Name: "Minimum TLS Version", | 				Name: "Minimum TLS Version", | ||||||
| 			}, | 			}, | ||||||
| 			AllowedValues: []interface{}{"tls10", "tls11", "tls12"}, | 			AllowedValues: []interface{}{"tls10", "tls11", "tls12", "tls13"}, | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		"tls_max_version": { | 		"tls_max_version": { | ||||||
| 			Type:        framework.TypeString, | 			Type:        framework.TypeString, | ||||||
| 			Default:     "tls12", | 			Default:     "tls12", | ||||||
| 			Description: "Maximum TLS version to use. Accepted values are 'tls10', 'tls11' or 'tls12'. Defaults to 'tls12'", | 			Description: "Maximum TLS version to use. Accepted values are 'tls10', 'tls11', 'tls12' or 'tls13'. Defaults to 'tls12'", | ||||||
| 			DisplayAttrs: &framework.DisplayAttributes{ | 			DisplayAttrs: &framework.DisplayAttributes{ | ||||||
| 				Name: "Maximum TLS Version", | 				Name: "Maximum TLS Version", | ||||||
| 			}, | 			}, | ||||||
| 			AllowedValues: []interface{}{"tls10", "tls11", "tls12"}, | 			AllowedValues: []interface{}{"tls10", "tls11", "tls12", "tls13"}, | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		"deny_null_bind": { | 		"deny_null_bind": { | ||||||
|   | |||||||
| @@ -126,7 +126,7 @@ PASSPHRASECORRECT: | |||||||
| 	tlsConf.NextProtos = []string{"h2", "http/1.1"} | 	tlsConf.NextProtos = []string{"h2", "http/1.1"} | ||||||
| 	tlsConf.MinVersion, ok = tlsutil.TLSLookup[tlsvers] | 	tlsConf.MinVersion, ok = tlsutil.TLSLookup[tlsvers] | ||||||
| 	if !ok { | 	if !ok { | ||||||
| 		return nil, nil, nil, nil, fmt.Errorf("'tls_min_version' value %q not supported, please specify one of [tls10,tls11,tls12]", tlsvers) | 		return nil, nil, nil, nil, fmt.Errorf("'tls_min_version' value %q not supported, please specify one of [tls10,tls11,tls12,tls13]", tlsvers) | ||||||
| 	} | 	} | ||||||
| 	tlsConf.ClientAuth = tls.RequestClientCert | 	tlsConf.ClientAuth = tls.RequestClientCert | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ var TLSLookup = map[string]uint16{ | |||||||
| 	"tls10": tls.VersionTLS10, | 	"tls10": tls.VersionTLS10, | ||||||
| 	"tls11": tls.VersionTLS11, | 	"tls11": tls.VersionTLS11, | ||||||
| 	"tls12": tls.VersionTLS12, | 	"tls12": tls.VersionTLS12, | ||||||
|  | 	"tls13": tls.VersionTLS13, | ||||||
| } | } | ||||||
|  |  | ||||||
| // cipherMap maps the cipher suite names to the internal cipher suite code. | // cipherMap maps the cipher suite names to the internal cipher suite code. | ||||||
|   | |||||||
| @@ -109,9 +109,9 @@ This endpoint configures LDAP in the Kerberos auth method. | |||||||
| - `starttls` `(bool: false)` – If true, issues a `StartTLS` command after | - `starttls` `(bool: false)` – If true, issues a `StartTLS` command after | ||||||
|   establishing an unencrypted connection. |   establishing an unencrypted connection. | ||||||
| - `tls_min_version` `(string: tls12)` – Minimum TLS version to use. Accepted | - `tls_min_version` `(string: tls12)` – Minimum TLS version to use. Accepted | ||||||
|   values are `tls10`, `tls11` or `tls12`. |   values are `tls10`, `tls11`, `tls12` or `tls13`. | ||||||
| - `tls_max_version` `(string: tls12)` – Maximum TLS version to use. Accepted | - `tls_max_version` `(string: tls12)` – Maximum TLS version to use. Accepted | ||||||
|   values are `tls10`, `tls11` or `tls12`. |   values are `tls10`, `tls11`, `tls12` or `tls13`. | ||||||
| - `insecure_tls` `(bool: false)` – If true, skips LDAP server SSL certificate | - `insecure_tls` `(bool: false)` – If true, skips LDAP server SSL certificate | ||||||
|   verification - insecure, use with caution! |   verification - insecure, use with caution! | ||||||
| - `certificate` `(string: "")` – CA certificate to use when verifying LDAP server | - `certificate` `(string: "")` – CA certificate to use when verifying LDAP server | ||||||
|   | |||||||
| @@ -40,9 +40,9 @@ This endpoint configures the LDAP auth method. | |||||||
| - `starttls` `(bool: false)` – If true, issues a `StartTLS` command after | - `starttls` `(bool: false)` – If true, issues a `StartTLS` command after | ||||||
|   establishing an unencrypted connection. |   establishing an unencrypted connection. | ||||||
| - `tls_min_version` `(string: tls12)` – Minimum TLS version to use. Accepted | - `tls_min_version` `(string: tls12)` – Minimum TLS version to use. Accepted | ||||||
|   values are `tls10`, `tls11` or `tls12`. |   values are `tls10`, `tls11`, `tls12` or `tls13`. | ||||||
| - `tls_max_version` `(string: tls12)` – Maximum TLS version to use. Accepted | - `tls_max_version` `(string: tls12)` – Maximum TLS version to use. Accepted | ||||||
|   values are `tls10`, `tls11` or `tls12`. |   values are `tls10`, `tls11`, `tls12` or `tls13`. | ||||||
| - `insecure_tls` `(bool: false)` – If true, skips LDAP server SSL certificate | - `insecure_tls` `(bool: false)` – If true, skips LDAP server SSL certificate | ||||||
|   verification - insecure, use with caution! |   verification - insecure, use with caution! | ||||||
| - `certificate` `(string: "")` – CA certificate to use when verifying LDAP server | - `certificate` `(string: "")` – CA certificate to use when verifying LDAP server | ||||||
|   | |||||||
| @@ -99,7 +99,7 @@ advertise the correct address to other nodes. | |||||||
|   while Vault is running will have no effect for `SIGHUP`s. |   while Vault is running will have no effect for `SIGHUP`s. | ||||||
|  |  | ||||||
| - `tls_min_version` `(string: "tls12")` – Specifies the minimum supported | - `tls_min_version` `(string: "tls12")` – Specifies the minimum supported | ||||||
|   version of TLS. Accepted values are "tls10", "tls11" or "tls12". |   version of TLS. Accepted values are "tls10", "tls11", "tls12" or "tls13". | ||||||
|  |  | ||||||
|   ~> **Warning**: TLS 1.1 and lower are generally considered insecure. |   ~> **Warning**: TLS 1.1 and lower are generally considered insecure. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -103,7 +103,7 @@ connection. You can read more about encrypting Consul connections on the | |||||||
|   in Consul. |   in Consul. | ||||||
|  |  | ||||||
| - `tls_min_version` `(string: "tls12")` – Specifies the minimum TLS version to | - `tls_min_version` `(string: "tls12")` – Specifies the minimum TLS version to | ||||||
|   use. Accepted values are `"tls10"`, `"tls11"` or `"tls12"`. |   use. Accepted values are `"tls10"`, `"tls11"`, `"tls12"` or `"tls13"`. | ||||||
|  |  | ||||||
| - `tls_skip_verify` `(string: "false")` – Disable verification of TLS certificates. | - `tls_skip_verify` `(string: "false")` – Disable verification of TLS certificates. | ||||||
|   Using this option is highly discouraged. |   Using this option is highly discouraged. | ||||||
|   | |||||||
| @@ -88,7 +88,7 @@ CREATE TABLE "vault"."entries" ( | |||||||
|   will be disabled for Cassandra. Defaults to `0`. |   will be disabled for Cassandra. Defaults to `0`. | ||||||
|  |  | ||||||
| - `tls_min_version` `(string: "tls12")` - Minimum TLS version to use. Accepted | - `tls_min_version` `(string: "tls12")` - Minimum TLS version to use. Accepted | ||||||
|   values are `tls10`, `tls11` or `tls12`. Defaults to `tls12`. |   values are `tls10`, `tls11`,  `tls12` or `tls13`. Defaults to `tls12`. | ||||||
|  |  | ||||||
| [cassandra]: http://cassandra.apache.org/ | [cassandra]: http://cassandra.apache.org/ | ||||||
| [replication-options]: https://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureDataDistributeReplication_c.html | [replication-options]: https://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureDataDistributeReplication_c.html | ||||||
|   | |||||||
| @@ -133,7 +133,7 @@ connection. You can read more about encrypting Consul connections on the | |||||||
|   in Consul. |   in Consul. | ||||||
|  |  | ||||||
| - `tls_min_version` `(string: "tls12")` – Specifies the minimum TLS version to | - `tls_min_version` `(string: "tls12")` – Specifies the minimum TLS version to | ||||||
|   use. Accepted values are `"tls10"`, `"tls11"` or `"tls12"`. |   use. Accepted values are `"tls10"`, `"tls11"`, `"tls12"` or `"tls13"`. | ||||||
|  |  | ||||||
| - `tls_skip_verify` `(string: "false")` – Disable verification of TLS certificates. | - `tls_skip_verify` `(string: "false")` – Disable verification of TLS certificates. | ||||||
|   Using this option is highly discouraged. |   Using this option is highly discouraged. | ||||||
|   | |||||||
| @@ -78,7 +78,7 @@ znodes and, potentially, take Vault out of service. | |||||||
|   Zookeeper communication. |   Zookeeper communication. | ||||||
|  |  | ||||||
| - `tls_min_version` `(string: "tls12")` – Specifies the minimum TLS version to | - `tls_min_version` `(string: "tls12")` – Specifies the minimum TLS version to | ||||||
|   use. Accepted values are `"tls10"`, `"tls11"` or `"tls12"`. |   use. Accepted values are `"tls10"`, `"tls11"`, `"tls12"` or `"tls13"`. | ||||||
|  |  | ||||||
| - `tls_skip_verify` `(bool: false)` – Disable verification of TLS certificates. | - `tls_skip_verify` `(bool: false)` – Disable verification of TLS certificates. | ||||||
|   Using this option is highly discouraged. |   Using this option is highly discouraged. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user