Skip to content

Commit da8f632

Browse files
committed
always use system CA when setting up TLS
Signed-off-by: Eric Chee <eric.chee@datadoghq.com>
1 parent 7d20a6a commit da8f632

2 files changed

Lines changed: 42 additions & 36 deletions

File tree

server/server/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ type (
8585
KeyData string `yaml:"keyData"`
8686
EnableHostVerification bool `yaml:"enableHostVerification"`
8787
ServerName string `yaml:"serverName"`
88+
DisableTLS bool `yaml:"disableTLS"`
8889
}
8990

9091
Auth struct {

server/server/rpc/tls.go

Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,14 @@ func CreateTLSConfig(address string, cfg *config.TLS) (*tls.Config, error) {
6060
if err != nil {
6161
return nil, err
6262
}
63-
64-
if cfg.CaFile != "" || cfg.CaData != "" {
65-
caCertPool, err := loadCACert(cfg)
63+
if !cfg.DisableTLS {
64+
caPool, err = loadCACert(cfg)
6665
if err != nil {
6766
log.Fatalf("Unable to load server CA certificate")
6867
return nil, err
6968
}
70-
71-
caPool = caCertPool
7269
}
70+
7371
if cfg.CertFile != "" || cfg.CertData != "" {
7472
keyPair, err := loadKeyPair(cfg)
7573
if err != nil {
@@ -111,44 +109,51 @@ func CreateTLSConfig(address string, cfg *config.TLS) (*tls.Config, error) {
111109
}
112110

113111
func loadCACert(cfg *config.TLS) (caPool *x509.CertPool, err error) {
114-
pathOrUrl := cfg.CaFile
115-
caData := cfg.CaData
116-
117-
caPool = x509.NewCertPool()
118-
var caBytes []byte
119112

120-
if strings.HasPrefix(pathOrUrl, "http://") {
121-
return nil, errors.New("HTTP is not supported for CA cert URLs. Provide HTTPS URL")
113+
caPool, err = x509.SystemCertPool()
114+
if err != nil {
115+
return nil, fmt.Errorf("unable to load system CA cert pool: %v", err)
122116
}
123117

124-
if strings.HasPrefix(pathOrUrl, "https://") {
125-
resp, err := netClient.Get(pathOrUrl)
126-
if err != nil {
127-
return nil, fmt.Errorf("unable to load CA cert from URL: %v", err)
128-
}
129-
defer resp.Body.Close()
130-
caBytes, err = io.ReadAll(resp.Body)
131-
if err != nil {
132-
return nil, fmt.Errorf("unable to load CA cert from URL: %v", err)
133-
}
118+
// Append additional CA certs configured if provided
119+
if cfg.CaFile != "" || cfg.CaData != "" {
120+
pathOrUrl := cfg.CaFile
121+
caData := cfg.CaData
122+
var caBytes []byte
134123

135-
log.Printf("Loaded TLS CA cert from URL: %v", pathOrUrl)
136-
} else if pathOrUrl != "" {
137-
caBytes, err = os.ReadFile(pathOrUrl)
138-
if err != nil {
139-
return nil, fmt.Errorf("unable to load CA cert from file: %v", err)
124+
if strings.HasPrefix(pathOrUrl, "http://") {
125+
return nil, errors.New("HTTP is not supported for CA cert URLs. Provide HTTPS URL")
140126
}
141-
log.Printf("Loaded TLS CA cert from file: %v", pathOrUrl)
142-
} else if caData != "" {
143-
caBytes, err = base64.StdEncoding.DecodeString(caData)
144-
if err != nil {
145-
return nil, fmt.Errorf("unable to decode CA cert from base64: %v", err)
127+
128+
if strings.HasPrefix(pathOrUrl, "https://") {
129+
resp, err := netClient.Get(pathOrUrl)
130+
if err != nil {
131+
return nil, fmt.Errorf("unable to load CA cert from URL: %v", err)
132+
}
133+
defer resp.Body.Close()
134+
caBytes, err = io.ReadAll(resp.Body)
135+
if err != nil {
136+
return nil, fmt.Errorf("unable to load CA cert from URL: %v", err)
137+
}
138+
139+
log.Printf("Loaded TLS CA cert from URL: %v", pathOrUrl)
140+
} else if pathOrUrl != "" {
141+
caBytes, err = os.ReadFile(pathOrUrl)
142+
if err != nil {
143+
return nil, fmt.Errorf("unable to load CA cert from file: %v", err)
144+
}
145+
log.Printf("Loaded TLS CA cert from file: %v", pathOrUrl)
146+
} else if caData != "" {
147+
caBytes, err = base64.StdEncoding.DecodeString(caData)
148+
if err != nil {
149+
return nil, fmt.Errorf("unable to decode CA cert from base64: %v", err)
150+
}
151+
log.Printf("Loaded CA cert from base64")
146152
}
147-
log.Printf("Loaded CA cert from base64")
148-
}
149153

150-
if !caPool.AppendCertsFromPEM(caBytes) {
151-
return nil, errors.New("unknown failure constructing cert pool for ca")
154+
if !caPool.AppendCertsFromPEM(caBytes) {
155+
return nil, errors.New("unknown failure constructing cert pool for ca")
156+
}
152157
}
153158
return caPool, nil
154159
}

0 commit comments

Comments
 (0)