diff --git a/net/client.go b/net/client.go new file mode 100644 index 0000000000000000000000000000000000000000..b5c9d9755ce502b2617563d64b93f427fe05184e --- /dev/null +++ b/net/client.go @@ -0,0 +1,42 @@ +package net + +import ( + "crypto/tls" + "crypto/x509" + "flag" + "io/ioutil" + "log" + "math/rand" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" +) + +// Connect to a peer +// +// Closing must be defered after call +func Connect(addr_port string, cert, key, ca []byte) *ClientConn { + // load peer cert/key, ca as PEM buffers + peerCert, err := tls.X509KeyPair(cert, key) + if err != nil { + log.Fatal("Load peer cert/key error: %v", err) + } + caCertPool := x509.NewCertPool() + caCertPool.AppendCertsFromPEM(ca) + + // configure transport authentificator + ta := credentials.NewTLS(&tls.Config{ + Certificates: []tls.Certificate{peerCert}, + RootCAs: caCertPool, + }) + + // let's do the dialing ! + con, err := grpc.Dial(addr_port, grpc.WithTransportCredentials(ta)) + if err != nil { + grpclog.Fatalf("Fail to dial: %v", err) + } + + return con +}