2016-10-25 22:57:38 +00:00
|
|
|
package config
|
|
|
|
|
|
|
|
// TLSConfig provides TLS related configuration
|
|
|
|
type TLSConfig struct {
|
|
|
|
|
|
|
|
// EnableHTTP enabled TLS for http traffic to the Nomad server and clients
|
|
|
|
EnableHTTP bool `mapstructure:"http"`
|
|
|
|
|
|
|
|
// EnableRPC enables TLS for RPC and Raft traffic to the Nomad servers
|
|
|
|
EnableRPC bool `mapstructure:"rpc"`
|
|
|
|
|
|
|
|
// VerifyServerHostname is used to enable hostname verification of servers. This
|
2016-11-03 21:45:03 +00:00
|
|
|
// ensures that the certificate presented is valid for server.<region>.nomad
|
2016-10-25 22:57:38 +00:00
|
|
|
// This prevents a compromised client from being restarted as a server, and then
|
|
|
|
// intercepting request traffic as well as being added as a raft peer. This should be
|
|
|
|
// enabled by default with VerifyOutgoing, but for legacy reasons we cannot break
|
|
|
|
// existing clients.
|
|
|
|
VerifyServerHostname bool `mapstructure:"verify_server_hostname"`
|
|
|
|
|
|
|
|
// CAFile is a path to a certificate authority file. This is used with VerifyIncoming
|
|
|
|
// or VerifyOutgoing to verify the TLS connection.
|
|
|
|
CAFile string `mapstructure:"ca_file"`
|
|
|
|
|
|
|
|
// CertFile is used to provide a TLS certificate that is used for serving TLS connections.
|
|
|
|
// Must be provided to serve TLS connections.
|
|
|
|
CertFile string `mapstructure:"cert_file"`
|
|
|
|
|
|
|
|
// KeyFile is used to provide a TLS key that is used for serving TLS connections.
|
|
|
|
// Must be provided to serve TLS connections.
|
|
|
|
KeyFile string `mapstructure:"key_file"`
|
2017-04-26 17:58:19 +00:00
|
|
|
|
2017-04-28 09:45:09 +00:00
|
|
|
// Verify connections to the HTTPS API
|
|
|
|
VerifyHTTPSClient bool `mapstructure:"verify_https_client"`
|
2016-10-25 22:57:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Merge is used to merge two TLS configs together
|
|
|
|
func (t *TLSConfig) Merge(b *TLSConfig) *TLSConfig {
|
|
|
|
result := *t
|
|
|
|
|
|
|
|
if b.EnableHTTP {
|
|
|
|
result.EnableHTTP = true
|
|
|
|
}
|
|
|
|
if b.EnableRPC {
|
|
|
|
result.EnableRPC = true
|
|
|
|
}
|
|
|
|
if b.VerifyServerHostname {
|
|
|
|
result.VerifyServerHostname = true
|
|
|
|
}
|
|
|
|
if b.CAFile != "" {
|
|
|
|
result.CAFile = b.CAFile
|
|
|
|
}
|
|
|
|
if b.CertFile != "" {
|
|
|
|
result.CertFile = b.CertFile
|
|
|
|
}
|
|
|
|
if b.KeyFile != "" {
|
|
|
|
result.KeyFile = b.KeyFile
|
|
|
|
}
|
2017-04-28 09:45:09 +00:00
|
|
|
if b.VerifyHTTPSClient {
|
|
|
|
result.VerifyHTTPSClient = true
|
2017-04-25 22:29:43 +00:00
|
|
|
}
|
2016-10-25 22:57:38 +00:00
|
|
|
return &result
|
|
|
|
}
|