in whisk/client.go [194:252]
func (c *Client) LoadX509KeyPair() error {
tlsConfig := &tls.Config{
InsecureSkipVerify: c.Config.Insecure,
}
if c.Config.Cert != "" && c.Config.Key != "" {
if cert, err := ReadX509KeyPair(c.Config.Cert, c.Config.Key); err == nil {
tlsConfig.Certificates = []tls.Certificate{cert}
} else {
errStr := wski18n.T("Unable to load the X509 key pair due to the following reason: {{.err}}",
map[string]interface{}{"err": err})
werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
return werr
}
} else if !c.Config.Insecure {
if c.Config.Cert == "" {
warningStr := "The Cert file is not configured. Please configure the missing Cert file, if there is a security issue accessing the service.\n"
Debug(DbgWarn, warningStr)
if c.Config.Key != "" {
errStr := wski18n.T("The Cert file is not configured. Please configure the missing Cert file.\n")
werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
return werr
}
}
if c.Config.Key == "" {
warningStr := "The Key file is not configured. Please configure the missing Key file, if there is a security issue accessing the service.\n"
Debug(DbgWarn, warningStr)
if c.Config.Cert != "" {
errStr := wski18n.T("The Key file is not configured. Please configure the missing Key file.\n")
werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
return werr
}
}
}
// Only replace the existing transport when a custom TLS configuration is needed
if tlsConfig.InsecureSkipVerify || tlsConfig.Certificates != nil {
if c.client.Transport != nil {
warningStr := "The provided http.Transport is replaced to match the TLS configuration. Custom transport cannot coexist with nondefault TLS configuration"
Debug(DbgWarn, warningStr)
}
// Use the defaultTransport as the transport basis to maintain proxy support
c.client.Transport = &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
TLSClientConfig: tlsConfig,
}
}
return nil
}