|
|
@@ -46,6 +46,11 @@ func NewListener(addr string, info TLSInfo) (net.Listener, error) {
|
|
|
}
|
|
|
|
|
|
func NewTransport(info TLSInfo) (*http.Transport, error) {
|
|
|
+ cfg, err := info.ClientConfig()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
t := &http.Transport{
|
|
|
// timeouts taken from http.DefaultTransport
|
|
|
Dial: (&net.Dialer{
|
|
|
@@ -53,14 +58,7 @@ func NewTransport(info TLSInfo) (*http.Transport, error) {
|
|
|
KeepAlive: 30 * time.Second,
|
|
|
}).Dial,
|
|
|
TLSHandshakeTimeout: 10 * time.Second,
|
|
|
- }
|
|
|
-
|
|
|
- if !info.Empty() {
|
|
|
- tlsCfg, err := info.ClientConfig()
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- t.TLSClientConfig = tlsCfg
|
|
|
+ TLSClientConfig: cfg,
|
|
|
}
|
|
|
|
|
|
return t, nil
|
|
|
@@ -134,22 +132,24 @@ func (info TLSInfo) ServerConfig() (*tls.Config, error) {
|
|
|
}
|
|
|
|
|
|
// ClientConfig generates a tls.Config object for use by an HTTP client
|
|
|
-func (info TLSInfo) ClientConfig() (*tls.Config, error) {
|
|
|
- cfg, err := info.baseConfig()
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
+func (info TLSInfo) ClientConfig() (cfg *tls.Config, err error) {
|
|
|
+ if !info.Empty() {
|
|
|
+ cfg, err = info.baseConfig()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cfg = &tls.Config{}
|
|
|
}
|
|
|
|
|
|
if info.CAFile != "" {
|
|
|
- cp, err := newCertPool(info.CAFile)
|
|
|
+ cfg.RootCAs, err = newCertPool(info.CAFile)
|
|
|
if err != nil {
|
|
|
- return nil, err
|
|
|
+ return
|
|
|
}
|
|
|
-
|
|
|
- cfg.RootCAs = cp
|
|
|
}
|
|
|
|
|
|
- return cfg, nil
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
// newCertPool creates x509 certPool with provided CA file
|