// NewBuilder is the constructor for a new default Builder instance. func NewBuilder(apiServerURL, username, password, awsKey, awsSecret, awsRegion string, locker locks.Locker, buildScriptsRepo, buildScriptsRepoBranch string) Builder { tlsConfig := tls.Config{} caCert, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/ca.crt") if err != nil { Log.Printf("Skipping Kubernetes master TLS verify: %v\n", err) tlsConfig.InsecureSkipVerify = true } else { caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) tlsConfig.RootCAs = caCertPool Log.Println("Kubernetes master secured with TLS") } apiClient := &http.Client{Transport: &http.Transport{ TLSClientConfig: &tlsConfig, }} data, _ := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/token") return DefaultBuilder{ MasterURL: apiServerURL, apiToken: string(data), UserName: username, Password: password, Locker: locker, AWSAccessKeyID: awsKey, AWSAccessSecret: awsSecret, AWSRegion: awsRegion, apiClient: apiClient, maxPods: 10, buildScriptsRepo: buildScriptsRepo, buildScriptsRepoBranch: buildScriptsRepoBranch, } }
func getTlsConfig(verify bool, cert, key, ca string) (*tls.Config, error) { var config tls.Config config.InsecureSkipVerify = true if verify { certPool := x509.NewCertPool() file, err := ioutil.ReadFile(ca) if err != nil { return nil, err } certPool.AppendCertsFromPEM(file) config.RootCAs = certPool config.InsecureSkipVerify = false } _, errCert := os.Stat(cert) _, errKey := os.Stat(key) if errCert == nil || errKey == nil { tlsCert, err := tls.LoadX509KeyPair(cert, key) if err != nil { return nil, fmt.Errorf("Couldn't load X509 key pair: %v. Key encrpyted?\n", err) } config.Certificates = []tls.Certificate{tlsCert} } config.MinVersion = tls.VersionTLS10 return &config, nil }
func (cn *conn) ssl(o values) { verifyCaOnly := false tlsConf := tls.Config{} switch mode := o.Get("sslmode"); mode { // "require" is the default. case "", "require": // We must skip TLS's own verification since it requires full // verification since Go 1.3. tlsConf.InsecureSkipVerify = true // From http://www.postgresql.org/docs/current/static/libpq-ssl.html: // Note: For backwards compatibility with earlier versions of PostgreSQL, if a // root CA file exists, the behavior of sslmode=require will be the same as // that of verify-ca, meaning the server certificate is validated against the // CA. Relying on this behavior is discouraged, and applications that need // certificate validation should always use verify-ca or verify-full. if _, err := os.Stat(o.Get("sslrootcert")); err == nil { verifyCaOnly = true } else { o.Set("sslrootcert", "") } case "verify-ca": // We must skip TLS's own verification since it requires full // verification since Go 1.3. tlsConf.InsecureSkipVerify = true verifyCaOnly = true case "verify-full": tlsConf.ServerName = o.Get("host") case "disable": return default: errorf(`unsupported sslmode %q; only "require" (default), "verify-full", "verify-ca", and "disable" supported`, mode) } cn.setupSSLClientCertificates(&tlsConf, o) cn.setupSSLCA(&tlsConf, o) w := cn.writeBuf(0) w.int32(80877103) cn.sendStartupPacket(w) b := cn.scratch[:1] _, err := io.ReadFull(cn.c, b) if err != nil { panic(err) } if b[0] != 'S' { panic(ErrSSLNotSupported) } client := tls.Client(cn.c, &tlsConf) if verifyCaOnly { cn.verifyCA(client, &tlsConf) } cn.c = client }
func newDockerClient() *client.DockerCli { // Set terminal emulation based on platform as required. stdin, stdout, stderr := term.StdStreams() setDefaultConfFlag(flTrustKey, defaultTrustKeyFile) if len(flHosts) > 1 { log.Fatal("Please specify only one -H") } protoAddrParts := strings.SplitN(flHosts[0], "://", 2) var ( cli *client.DockerCli tlsConfig tls.Config ) tlsConfig.InsecureSkipVerify = true // Regardless of whether the user sets it to true or false, if they // specify --tlsverify at all then we need to turn on tls if flag.IsSet("-tlsverify") { *flTls = true } // If we should verify the server, we need to load a trusted ca if *flTlsVerify { certPool := x509.NewCertPool() file, err := ioutil.ReadFile(*flCa) if err != nil { log.Fatalf("Couldn't read ca cert %s: %s", *flCa, err) } certPool.AppendCertsFromPEM(file) tlsConfig.RootCAs = certPool tlsConfig.InsecureSkipVerify = false } // If tls is enabled, try to load and send client certificates if *flTls || *flTlsVerify { _, errCert := os.Stat(*flCert) _, errKey := os.Stat(*flKey) if errCert == nil && errKey == nil { *flTls = true cert, err := tls.LoadX509KeyPair(*flCert, *flKey) if err != nil { log.Fatalf("Couldn't load X509 key pair: %q. Make sure the key is encrypted", err) } tlsConfig.Certificates = []tls.Certificate{cert} } // Avoid fallback to SSL protocols < TLS1.0 tlsConfig.MinVersion = tls.VersionTLS10 } cli = client.NewDockerCli(stdin, stdout, stderr, *flTrustKey, protoAddrParts[0], protoAddrParts[1], &tlsConfig) return cli }
func (host *Host) getTLSConfig() (*tls.Config, error) { var tlsConfig tls.Config if !host.TLS { return nil, nil } tlsConfig.InsecureSkipVerify = !host.TLSVerify if host.TLSVerify { certPool := x509.NewCertPool() file, err := ioutil.ReadFile(host.TLSCaCert) if err != nil { return nil, err } certPool.AppendCertsFromPEM(file) tlsConfig.RootCAs = certPool } cert, err := tls.LoadX509KeyPair(host.TLSCert, host.TLSKey) if err != nil { return nil, err } tlsConfig.Certificates = []tls.Certificate{cert} tlsConfig.MinVersion = tls.VersionTLS10 return &tlsConfig, nil }
func getTLSConfig() (*tls.Config, error) { // TLS config var tlsConfig tls.Config tlsConfig.InsecureSkipVerify = true certPool := x509.NewCertPool() file, err := ioutil.ReadFile(config.CACertificate) if err != nil { return nil, err } certPool.AppendCertsFromPEM(file) tlsConfig.RootCAs = certPool _, errCert := os.Stat(config.SSLCertificate) _, errKey := os.Stat(config.SSLKey) if errCert == nil && errKey == nil { cert, err := tls.LoadX509KeyPair(config.SSLCertificate, config.SSLKey) if err != nil { return &tlsConfig, err } tlsConfig.Certificates = []tls.Certificate{cert} } return &tlsConfig, nil }
func setupTls(caFile, certFile, keyFile string) { if caFile == "" || certFile == "" || keyFile == "" { return } caData, err := ioutil.ReadFile(caFile) if os.IsNotExist(err) { return } if err != nil { fmt.Fprintf(os.Stderr, "Unable to load CA file\t%s\n", err) os.Exit(1) } caCertPool := x509.NewCertPool() if !caCertPool.AppendCertsFromPEM(caData) { fmt.Fprintln(os.Stderr, "Unable to parse CA file") os.Exit(1) } clientConfig := new(tls.Config) clientConfig.InsecureSkipVerify = true clientConfig.MinVersion = tls.VersionTLS12 clientConfig.RootCAs = caCertPool cert, err := tls.LoadX509KeyPair(certFile, keyFile) if os.IsNotExist(err) { return } if err != nil { fmt.Fprintf(os.Stderr, "Unable to load keypair\t%s\n", err) os.Exit(1) } clientConfig.Certificates = append(clientConfig.Certificates, cert) srpc.RegisterClientTlsConfig(clientConfig) }
func getNewSession(connString string) (*mgo.Session, *mgo.DialInfo) { // quick hack to allow SSL based connections, may be removed in future when parseURL supports it // see also: https://github.com/go-mgo/mgo/issues/84 const SSL_SUFFIX = "?ssl=true" useSsl := false if strings.HasSuffix(connString, SSL_SUFFIX) { connString = strings.TrimSuffix(connString, SSL_SUFFIX) useSsl = true } dialInfo, err := mgo.ParseURL(connString) if err != nil { panic(err) } dialInfo.Timeout = 10 * time.Second if useSsl { config := tls.Config{} config.InsecureSkipVerify = true dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) { return tls.Dial("tcp", addr.String(), &config) } } // get a mgo session session, err := mgo.DialWithInfo(dialInfo) if err != nil { panic(err) } return session, dialInfo }
// 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 main() { log.SetPrefix(PREFIX + " ") log.SetFlags(0) check := func(err error) { if err != nil { log.Fatal(err) } } if len(os.Args) < 3 { log.Fatal("give arguments plz") } config := new(tls.Config) config.InsecureSkipVerify = true config.CipherSuites = []uint16{ tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, } println("connecting") c, err := tls.Dial("tcp", os.Args[1], config) check(err) defer c.Close() w, err := os.Create(os.Args[2]) check(err) defer w.Close() statusc := make(chan float64) exit := make(chan struct{}) go statusLoop(statusc, exit) println("writing to", os.Args[2]) copyTo(c, w, statusc) <-exit fmt.Println("\n"+PREFIX, "done") }
// DialTablet creates and initializes TabletBson. func DialTablet(ctx context.Context, endPoint topo.EndPoint, keyspace, shard string, timeout time.Duration) (tabletconn.TabletConn, error) { var addr string var config *tls.Config if *tabletBsonEncrypted { addr = netutil.JoinHostPort(endPoint.Host, endPoint.NamedPortMap["vts"]) config = &tls.Config{} config.InsecureSkipVerify = true } else { addr = netutil.JoinHostPort(endPoint.Host, endPoint.NamedPortMap["vt"]) } conn := &TabletBson{endPoint: endPoint} var err error if *tabletBsonUsername != "" { conn.rpcClient, err = bsonrpc.DialAuthHTTP("tcp", addr, *tabletBsonUsername, *tabletBsonPassword, timeout, config) } else { conn.rpcClient, err = bsonrpc.DialHTTP("tcp", addr, timeout, config) } if err != nil { return nil, tabletError(err) } var sessionInfo tproto.SessionInfo if err = conn.rpcClient.Call(ctx, "SqlQuery.GetSessionId", tproto.SessionParams{Keyspace: keyspace, Shard: shard}, &sessionInfo); err != nil { conn.rpcClient.Close() return nil, tabletError(err) } // SqlQuery.GetSessionId might return an application error inside the SessionInfo if err = vterrors.FromRPCError(sessionInfo.Err); err != nil { conn.rpcClient.Close() return nil, tabletError(err) } conn.sessionID = sessionInfo.SessionId return conn, nil }
// DialTablet creates and initializes TabletBson. func DialTablet(context context.Context, endPoint topo.EndPoint, keyspace, shard string, timeout time.Duration) (tabletconn.TabletConn, error) { var addr string var config *tls.Config if *tabletBsonEncrypted { addr = fmt.Sprintf("%v:%v", endPoint.Host, endPoint.NamedPortMap["_vts"]) config = &tls.Config{} config.InsecureSkipVerify = true } else { addr = fmt.Sprintf("%v:%v", endPoint.Host, endPoint.NamedPortMap["_vtocc"]) } conn := &TabletBson{endPoint: endPoint} var err error if *tabletBsonUsername != "" { conn.rpcClient, err = bsonrpc.DialAuthHTTP("tcp", addr, *tabletBsonUsername, *tabletBsonPassword, timeout, config) } else { conn.rpcClient, err = bsonrpc.DialHTTP("tcp", addr, timeout, config) } if err != nil { return nil, tabletError(err) } var sessionInfo tproto.SessionInfo if err = conn.rpcClient.Call("SqlQuery.GetSessionId", tproto.SessionParams{Keyspace: keyspace, Shard: shard}, &sessionInfo); err != nil { conn.rpcClient.Close() return nil, tabletError(err) } conn.sessionID = sessionInfo.SessionId return conn, nil }
func runClient(transportFactory thrift.TTransportFactory, protocolFactory thrift.TProtocolFactory, addr string, secure bool) error { var transport thrift.TTransport var err error if secure { cfg := new(tls.Config) cfg.InsecureSkipVerify = true transport, err = thrift.NewTSSLSocket(addr, cfg) } else { transport, err = thrift.NewTSocket(addr) } if err != nil { fmt.Println("Error opening socket:", err) return err } transport = transportFactory.GetTransport(transport) defer transport.Close() if err := transport.Open(); err != nil { return err } client := example.NewMtExampleServiceClientFactory(transport, protocolFactory) oProfile, err := client.GetUserProfile(0) if err != nil { fmt.Println("GetUserProfile(0) ok " + oProfile.UseName) } return err }
func runClient(transportFactory thrift.TTransportFactory, protocolFactory thrift.TProtocolFactory, addr string, secure bool) error { var transport thrift.TTransport var err error if secure { cfg := new(tls.Config) cfg.InsecureSkipVerify = true transport, err = thrift.NewTSSLSocket(addr, cfg) } else { transport, err = thrift.NewTSocket(addr) } if err != nil { fmt.Println("Error opening socket:", err) return err } if transport == nil { return fmt.Errorf("Error opening socket, got nil transport. Is server available?") } transport = transportFactory.GetTransport(transport) if transport == nil { return fmt.Errorf("Error from transportFactory.GetTransport(), got nil transport. Is server available?") } err = transport.Open() if err != nil { return err } defer transport.Close() return handleClient(tutorial.NewCalculatorClientFactory(transport, protocolFactory)) }
func (cn *conn) ssl(o values) { tlsConf := tls.Config{} switch mode := o.Get("sslmode"); mode { case "require", "": tlsConf.InsecureSkipVerify = true case "verify-full": // fall out case "disable": return default: errorf(`unsupported sslmode %q; only "require" (default), "verify-full", and "disable" supported`, mode) } cn.setupSSLCertKey(&tlsConf, o) w := cn.writeBuf(0) w.int32(80877103) cn.send(w) b := cn.scratch[:1] _, err := io.ReadFull(cn.c, b) if err != nil { panic(err) } if b[0] != 'S' { panic(ErrSSLNotSupported) } cn.c = tls.Client(cn.c, &tlsConf) }
// GetServerTLSConfig returns a TLS config for using with ListenAndServeTLS // This sets up the Root and Client CAs for verification func GetServerTLSConfig(caCert, serverCert, serverKey []byte, allowInsecure bool) (*tls.Config, error) { // TLS config var tlsConfig tls.Config tlsConfig.InsecureSkipVerify = allowInsecure certPool := x509.NewCertPool() // load system certs if err := loadSystemCertificates(certPool); err != nil { return nil, err } // append custom CA certPool.AppendCertsFromPEM(caCert) tlsConfig.RootCAs = certPool tlsConfig.ClientCAs = certPool log.Debugf("tls root CAs: %d", len(tlsConfig.RootCAs.Subjects())) // require client auth tlsConfig.ClientAuth = tls.VerifyClientCertIfGiven // server cert keypair, err := tls.X509KeyPair(serverCert, serverKey) if err != nil { return &tlsConfig, err } tlsConfig.Certificates = []tls.Certificate{keypair} return &tlsConfig, nil }
func connectToAMQP(uri string) (*amqp.Connection, error) { var conn *amqp.Connection var err error if strings.Contains(uri, "amqps") { cfg := new(tls.Config) if len(os.Getenv("PMB_SSL_INSECURE_SKIP_VERIFY")) > 0 { cfg.InsecureSkipVerify = true } logrus.Debugf("calling DialTLS") conn, err = amqp.DialTLS(uri, cfg) logrus.Debugf("Connection obtained") } else { conn, err = amqp.Dial(uri) } if err != nil { return nil, err } //logrus.Debugf("Conn: ", conn) return conn, nil }
// Makes an outgoing connection using that protocol type to the given node ID. // Returns a non-nil error if it is unable to connect. // Panics if it is called with protocol set to CLIENT_PROTOCOL. func Dial(protocol int, id uint16) (*BaseConn, error) { log.Print("dialing node ", id) if protocol == CLIENT_PROTOCOL { panic("tried to make outgoing client protocol connection") } ip := config.NodeIP(id) ipStr := ip.String() port := getProtocolPort(protocol) portStr := strconv.FormatInt(int64(port), 10) tlsConfig := new(tls.Config) tlsConfig.Certificates = []tls.Certificate{*config.Certificate()} tlsConfig.RootCAs = config.NodeCertPool(id) // We rely on the receiving node to do TLS authentication for now. // This is safe because it verifies our identity for us. // Backwards to the usual arrangement but should be secure. tlsConfig.InsecureSkipVerify = true tlsConn, err := tls.Dial("tcp", ipStr+":"+portStr, tlsConfig) if err != nil { log.Print(err) return nil, err } return newBaseConn(tlsConn), nil }
func (c *tlsClient) Connect(timeout time.Duration) error { host, _, err := net.SplitHostPort(c.hostport) if err != nil { return err } var tlsconfig tls.Config tlsconfig.MinVersion = c.tls.MinVersion tlsconfig.RootCAs = c.tls.RootCAs tlsconfig.Certificates = c.tls.Certificates tlsconfig.ServerName = host tlsconfig.InsecureSkipVerify = c.tls.InsecureSkipVerify if err := c.tcpClient.Connect(timeout); err != nil { return c.onFail(err) } socket := tls.Client(c.Conn, &tlsconfig) if err := socket.SetDeadline(time.Now().Add(timeout)); err != nil { _ = socket.Close() return c.onFail(err) } if err := socket.Handshake(); err != nil { _ = socket.Close() return c.onFail(err) } c.Conn = socket c.connected = true return 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{} } 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 }
func main() { program := os.Args[0] if len(os.Args) < 2 { fmt.Printf("Usage: %s <file> [file2] ...\n", program) os.Exit(1) } tlsconf := new(tls.Config) /* TODO(sissel): Until I implement certificate loading... */ tlsconf.InsecureSkipVerify = true conn, err := Dial("tls", "localhost:5111", tlsconf) if err != nil { fmt.Printf("dial failure: %s\n", err) os.Exit(1) } events := make(chan FileEvent) for _, path := range os.Args[1:] { go Harvest(path, events) } for event := range events { fmt.Printf("%s: %s\n", event.path, string(event.line)) conn.WriteFileEvent(event) } } /* main */
// NewClient returns a new docker test client. func NewClient() ( cli *client.DockerCli, stdout *io.PipeReader, stdoutPipe *io.PipeWriter) { proto, addr, _ := DockerHost() stdout, stdoutPipe = io.Pipe() dockerCertPath := os.Getenv("DOCKER_CERT_PATH") // Boot2docker use TLS per default, Jenkins not if dockerCertPath != "" { var ( tlsConfig tls.Config ) tlsConfig.InsecureSkipVerify = true flCert := filepath.Join(dockerCertPath, defaultCertFile) flKey := filepath.Join(dockerCertPath, defaultKeyFile) _, errCert := os.Stat(flCert) _, errKey := os.Stat(flKey) if errCert == nil && errKey == nil { cert, err := tls.LoadX509KeyPair(flCert, flKey) if err != nil { log.Fatalf("Couldn't load X509 key pair: %s. Key encrypted?", err) } tlsConfig.Certificates = []tls.Certificate{cert} } // Avoid fallback to SSL protocols < TLS1.0 tlsConfig.MinVersion = tls.VersionTLS10 cli = client.NewDockerCli(nil, stdoutPipe, nil, nil, proto, addr, &tlsConfig) } else { cli = client.NewDockerCli(nil, stdoutPipe, nil, nil, proto, addr, nil) } return }
func cli(args CommandLineArguments, wg *sync.WaitGroup) { defer wg.Done() cfg, err := websocket.NewConfig(args.server, "wss://localhost") if err != nil { panic(err) } cert, err := tls.LoadX509KeyPair("server.pem", "server.key") if err != nil { panic(err) } config := tls.Config{Certificates: []tls.Certificate{cert}} config.InsecureSkipVerify = true cfg.TlsConfig = &config ws, err := websocket.DialConfig(cfg) if err != nil { panic(err) } if args.msg != "" { log.Println("Write data to websocket") _, err = ws.Write([]byte(args.msg)) if err != nil { panic(err) } } if args.file != "" { go func() { f, err := os.Open(args.file) if err != nil { panic(err) } defer f.Close() s := bufio.NewScanner(f) for s.Scan() { time.Sleep(time.Duration(args.delay) * time.Second) _, err = ws.Write([]byte(s.Text())) if err != nil { panic(err) } } }() } ws.SetReadDeadline(time.Now().Add(time.Second * time.Duration(args.timeOut))) msgOut := make([]byte, 16384) for { n, err := ws.Read(msgOut) log.Println("Read bytes:", n) if err == io.EOF { log.Println("Reading finished") break } if err != nil { log.Println(err) break } log.Println(string(msgOut[:n])) } log.Println("Closing connection") ws.Close() }
// ssl generates a function to upgrade a net.Conn based on the "sslmode" and // related settings. The function is nil when no upgrade should take place. func ssl(o values) func(net.Conn) net.Conn { verifyCaOnly := false tlsConf := tls.Config{} switch mode := o.Get("sslmode"); mode { // "require" is the default. case "", "require": // We must skip TLS's own verification since it requires full // verification since Go 1.3. tlsConf.InsecureSkipVerify = true // From http://www.postgresql.org/docs/current/static/libpq-ssl.html: // Note: For backwards compatibility with earlier versions of PostgreSQL, if a // root CA file exists, the behavior of sslmode=require will be the same as // that of verify-ca, meaning the server certificate is validated against the // CA. Relying on this behavior is discouraged, and applications that need // certificate validation should always use verify-ca or verify-full. if _, err := os.Stat(o.Get("sslrootcert")); err == nil { verifyCaOnly = true } else { o.Set("sslrootcert", "") } case "verify-ca": // We must skip TLS's own verification since it requires full // verification since Go 1.3. tlsConf.InsecureSkipVerify = true verifyCaOnly = true case "verify-full": tlsConf.ServerName = o.Get("host") case "disable": return nil default: errorf(`unsupported sslmode %q; only "require" (default), "verify-full", "verify-ca", and "disable" supported`, mode) } sslClientCertificates(&tlsConf, o) sslCertificateAuthority(&tlsConf, o) sslRenegotiation(&tlsConf) return func(conn net.Conn) net.Conn { client := tls.Client(conn, &tlsConf) if verifyCaOnly { sslVerifyCertificateAuthority(client, &tlsConf) } return client } }
// Main aids in the creation of a basic command line gumble bot. It accepts the // following flag arguments: // --server // --username // --password // --insecure, // --certificate // --key func Main(listeners ...gumble.EventListener) { server := flag.String("server", "localhost:64738", "Mumble server address") username := flag.String("username", "gumble-bot", "client username") password := flag.String("password", "", "client password") insecure := flag.Bool("insecure", false, "skip server certificate verification") certificateFile := flag.String("certificate", "", "user certificate file (PEM)") keyFile := flag.String("key", "", "user certificate key file (PEM)") if !flag.Parsed() { flag.Parse() } host, port, err := net.SplitHostPort(*server) if err != nil { host = *server port = strconv.Itoa(gumble.DefaultPort) } keepAlive := make(chan bool) config := gumble.NewConfig() config.Username = *username config.Password = *password address := net.JoinHostPort(host, port) var tlsConfig tls.Config if *insecure { tlsConfig.InsecureSkipVerify = true } if *certificateFile != "" { if *keyFile == "" { keyFile = certificateFile } if certificate, err := tls.LoadX509KeyPair(*certificateFile, *keyFile); err != nil { fmt.Printf("%s: %s\n", os.Args[0], err) os.Exit(1) } else { tlsConfig.Certificates = append(tlsConfig.Certificates, certificate) } } config.Attach(AutoBitrate) for _, listener := range listeners { config.Attach(listener) } config.Attach(Listener{ Disconnect: func(e *gumble.DisconnectEvent) { keepAlive <- true }, }) _, err = gumble.DialWithDialer(new(net.Dialer), address, config, &tlsConfig) if err != nil { fmt.Printf("%s: %s\n", os.Args[0], err) os.Exit(1) } <-keepAlive }
func ExampleNewService() { config := new(tls.Config) cert, _ := tls.LoadX509KeyPair("cert.pem", "cert.private.pem") // Don't verify certificates (we want to man-in-the-middle this) // Obviously, don't do this in production! config.InsecureSkipVerify = true config.Certificates = append(config.Certificates, cert) service := NewService("gateway.sandbox.push.apple.com:2195", config) service.Connect() }
func getTLSConfig(caCert, cert, key []byte, allowInsecure bool) (*tls.Config, error) { // TLS config var tlsConfig tls.Config tlsConfig.InsecureSkipVerify = true certPool := x509.NewCertPool() certPool.AppendCertsFromPEM(caCert) tlsConfig.RootCAs = certPool keypair, err := tls.X509KeyPair(cert, key) if err != nil { return &tlsConfig, err } tlsConfig.Certificates = []tls.Certificate{keypair} if allowInsecure { tlsConfig.InsecureSkipVerify = true } return &tlsConfig, nil }
func (auth *RequestAuthorization) getToken() (string, error) { auth.tokenLock.Lock() defer auth.tokenLock.Unlock() now := time.Now() if now.Before(auth.tokenExpiration) { log.Debugf("Using cached token for %s", auth.authConfig.Username) return auth.tokenCache, nil } tlsConfig := tls.Config{ MinVersion: tls.VersionTLS10, } if !auth.registryEndpoint.IsSecure { tlsConfig.InsecureSkipVerify = true } client := &http.Client{ Transport: &http.Transport{ DisableKeepAlives: true, Proxy: http.ProxyFromEnvironment, TLSClientConfig: &tlsConfig, }, CheckRedirect: AddRequiredHeadersToRedirectedRequests, } factory := HTTPRequestFactory(nil) for _, challenge := range auth.registryEndpoint.AuthChallenges { switch strings.ToLower(challenge.Scheme) { case "basic": // no token necessary case "bearer": log.Debugf("Getting bearer token with %s for %s", challenge.Parameters, auth.authConfig.Username) params := map[string]string{} for k, v := range challenge.Parameters { params[k] = v } params["scope"] = fmt.Sprintf("%s:%s:%s", auth.resource, auth.scope, strings.Join(auth.actions, ",")) token, err := getToken(auth.authConfig.Username, auth.authConfig.Password, params, auth.registryEndpoint, client, factory) if err != nil { return "", err } auth.tokenCache = token auth.tokenExpiration = now.Add(time.Minute) return token, nil default: log.Infof("Unsupported auth scheme: %q", challenge.Scheme) } } // Do not expire cache since there are no challenges which use a token auth.tokenExpiration = time.Now().Add(time.Hour * 24) return "", nil }
func (c *Cluster) makeAgentConfig(bucket, password string, mt bool) (*gocbcore.AgentConfig, error) { authFn := func(srv gocbcore.AuthClient, deadline time.Time) error { // Build PLAIN auth data userBuf := []byte(bucket) passBuf := []byte(password) authData := make([]byte, 1+len(userBuf)+1+len(passBuf)) authData[0] = 0 copy(authData[1:], userBuf) authData[1+len(userBuf)] = 0 copy(authData[1+len(userBuf)+1:], passBuf) // Execute PLAIN authentication _, err := srv.ExecSaslAuth([]byte("PLAIN"), authData, deadline) return err } memdHosts, httpHosts, isSslHosts := specToHosts(c.spec) var tlsConfig *tls.Config if isSslHosts { certpath := c.spec.Options.Get("certpath") tlsConfig = &tls.Config{} if certpath == "" { tlsConfig.InsecureSkipVerify = true } else { cacert, err := ioutil.ReadFile(certpath) if err != nil { return nil, err } roots := x509.NewCertPool() ok := roots.AppendCertsFromPEM(cacert) if !ok { return nil, ErrInvalidCert } tlsConfig.RootCAs = roots } } return &gocbcore.AgentConfig{ MemdAddrs: memdHosts, HttpAddrs: httpHosts, TlsConfig: tlsConfig, BucketName: bucket, Password: password, AuthHandler: authFn, UseMutationTokens: mt, ConnectTimeout: c.connectTimeout, ServerConnectTimeout: c.serverConnectTimeout, NmvRetryDelay: c.nmvRetryDelay, }, nil }
func (cn *conn) ssl(o values) { verifyCaOnly := false tlsConf := tls.Config{} switch mode := o.Get("sslmode"); mode { case "require", "": tlsConf.InsecureSkipVerify = true case "verify-ca": // We must skip TLS's own verification since it requires full // verification since Go 1.3. tlsConf.InsecureSkipVerify = true verifyCaOnly = true case "verify-full": tlsConf.ServerName = o.Get("host") case "disable": return default: errorf(`unsupported sslmode %q; only "require" (default), "verify-full", and "disable" supported`, mode) } cn.setupSSLClientCertificates(&tlsConf, o) cn.setupSSLCA(&tlsConf, o) w := cn.writeBuf(0) w.int32(80877103) cn.sendStartupPacket(w) b := cn.scratch[:1] _, err := io.ReadFull(cn.c, b) if err != nil { panic(err) } if b[0] != 'S' { panic(ErrSSLNotSupported) } client := tls.Client(cn.c, &tlsConf) if verifyCaOnly { cn.verifyCA(client, &tlsConf) } cn.c = client }