// ClientConfig generates a tls.Config object for use by an HTTP client. func (info TLSInfo) ClientConfig() (*tls.Config, error) { var cfg *tls.Config var err error if !info.Empty() { cfg, err = info.baseConfig() if err != nil { return nil, err } } else { cfg = &tls.Config{} } CAFiles := info.cafiles() if len(CAFiles) > 0 { cfg.RootCAs, err = tlsutil.NewCertPool(CAFiles) if err != nil { return nil, err } } if info.selfCert { cfg.InsecureSkipVerify = true } return cfg, nil }
// ServerConfig generates a tls.Config object for use by an HTTP server. func (info TLSInfo) ServerConfig() (*tls.Config, error) { cfg, err := info.baseConfig() if err != nil { return nil, err } cfg.ClientAuth = tls.NoClientCert if info.CAFile != "" || info.ClientCertAuth { cfg.ClientAuth = tls.RequireAndVerifyClientCert } CAFiles := info.cafiles() if len(CAFiles) > 0 { cp, err := tlsutil.NewCertPool(CAFiles) if err != nil { return nil, err } cfg.ClientCAs = cp } // "h2" NextProtos is necessary for enabling HTTP2 for go's HTTP server cfg.NextProtos = []string{"h2"} return cfg, nil }
// ClientConfig generates a tls.Config object for use by an HTTP client. func (info TLSInfo) ClientConfig() (*tls.Config, error) { var cfg *tls.Config var err error if !info.Empty() { cfg, err = info.baseConfig() if err != nil { return nil, err } } else { cfg = &tls.Config{ServerName: info.ServerName} } CAFiles := info.cafiles() if len(CAFiles) > 0 { cfg.RootCAs, err = tlsutil.NewCertPool(CAFiles) if err != nil { return nil, err } // if given a CA, trust any host with a cert signed by the CA cfg.ServerName = "" } if info.selfCert { cfg.InsecureSkipVerify = true } return cfg, nil }
func configFromFile(fpath string) (*Config, error) { b, err := ioutil.ReadFile(fpath) if err != nil { return nil, err } yc := &yamlConfig{} err = yaml.Unmarshal(b, yc) if err != nil { return nil, err } cfg := &Config{ Endpoints: yc.Endpoints, AutoSyncInterval: yc.AutoSyncInterval, DialTimeout: yc.DialTimeout, } if yc.InsecureTransport { cfg.TLS = nil return cfg, nil } var ( cert *tls.Certificate cp *x509.CertPool ) if yc.Certfile != "" && yc.Keyfile != "" { cert, err = tlsutil.NewCert(yc.Certfile, yc.Keyfile, nil) if err != nil { return nil, err } } if yc.CAfile != "" { cp, err = tlsutil.NewCertPool([]string{yc.CAfile}) if err != nil { return nil, err } } tlscfg := &tls.Config{ MinVersion: tls.VersionTLS10, InsecureSkipVerify: yc.InsecureSkipTLSVerify, RootCAs: cp, } if cert != nil { tlscfg.Certificates = []tls.Certificate{*cert} } cfg.TLS = tlscfg return cfg, nil }
// ServerConfig generates a tls.Config object for use by an HTTP server. func (info TLSInfo) ServerConfig() (*tls.Config, error) { cfg, err := info.baseConfig() if err != nil { return nil, err } cfg.ClientAuth = tls.NoClientCert if info.CAFile != "" || info.ClientCertAuth { cfg.ClientAuth = tls.RequireAndVerifyClientCert } CAFiles := info.cafiles() if len(CAFiles) > 0 { cp, err := tlsutil.NewCertPool(CAFiles) if err != nil { return nil, err } cfg.ClientCAs = cp } return cfg, nil }