Skip to content

Commit d464c61

Browse files
authored
allow option to specify tls key,cert for gw while connecting to grpc listener (#4)
1 parent b1661f8 commit d464c61

4 files changed

Lines changed: 41 additions & 26 deletions

File tree

log/log.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func (l *Logger) initWrappedLogger() {
113113
// Tee off logs to rollbar
114114
zcores = append(zcores, newRollbarCore(l.rollbarToken, l.getEvironment(), l.getVersion(), l.rollbarMinLevel))
115115
}
116-
wl := zap.New(zapcore.NewTee(zcores...), zap.AddCaller(), zap.AddCallerSkip(1), zap.AddStacktrace(zap.WarnLevel))
116+
wl := zap.New(zapcore.NewTee(zcores...), zap.AddCaller(), zap.AddCallerSkip(1), zap.AddStacktrace(zap.ErrorLevel))
117117
l.wrappedLogger = wl.Named(l.name).Sugar()
118118
}
119119

server/option.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ func TLSCred(certFile, keyFile, clientCA string) Option {
124124
})
125125
}
126126

127+
// GatewayClientTLSCred Key and Cert file to be used by gateway client to connect to the gw server
128+
func GatewayClientTLSCred(certFile, keyFile string) Option {
129+
return optionFunc(func(r *runtime) {
130+
r.gwClientKeyFile = keyFile
131+
r.gwClientCertFile = certFile
132+
})
133+
}
134+
127135
// GRPCAPI that needs to be registered with Runtime
128136
func GRPCAPI(handler GRPCAPIHandler, gw bool) Option {
129137
return optionFunc(func(r *runtime) {

server/runtime.go

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,12 @@ type (
7474
mPort uint // metrics server port
7575
dPort uint // debug server port
7676

77-
certFile string
78-
keyFile string
79-
clientCA string
77+
certFile string // TLS certificate used by server listener
78+
keyFile string // TLS private key used by server listener
79+
clientCA string // mTLS. if specified connections are accepted from clients that present certs signed by this CA
80+
81+
gwClientCertFile string // TLS certificate for gw client to connect to grpc server
82+
gwClientKeyFile string // TLS private key for gw client to connect to grpc server
8083

8184
grpcEnabled bool // enable grpc server
8285
htEnabled bool // enable http server
@@ -353,15 +356,14 @@ func (r *runtime) Stop(ctx context.Context) {
353356

354357
if r.gwEnabled {
355358
r.logger.Info("shutting gateway server")
359+
if err := r.gwClientConn.Close(); err != nil {
360+
r.logger.Errorf("error happened while closing gateway grpc client -%v", err)
361+
}
356362
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
357363
defer cancel()
358364
if err := r.gwServer.Shutdown(ctx); err != nil {
359365
r.logger.Errorf("error happened while shutting gateway server -%v", err)
360366
}
361-
362-
if err := r.gwClientConn.Close(); err != nil {
363-
r.logger.Errorf("error happened while closing gateway grpc client -%v", err)
364-
}
365367
}
366368

367369
if r.grpcEnabled {
@@ -571,11 +573,30 @@ func (r *runtime) getGRPCClientConnectionForGateway(ctx context.Context) (*grpc.
571573
opts := []grpc.DialOption{}
572574

573575
if r.isSecureConnection() {
574-
tc, err := newTLSConfig()
575-
if err != nil {
576-
return nil, err
576+
577+
var (
578+
cert tls.Certificate
579+
err error
580+
)
581+
if r.gwClientCertFile != "" && r.gwClientKeyFile != "" {
582+
if cert, err = tls.LoadX509KeyPair(r.gwClientCertFile, r.gwClientKeyFile); err != nil {
583+
return nil, err
584+
}
585+
586+
} else if r.gwClientCertFile == "" && r.gwClientKeyFile == "" {
587+
if cert, err = newClientCert(); err != nil {
588+
return nil, err
589+
}
590+
} else {
591+
return nil, errors.New("gateway client connection: both cert and private key file must be specified")
577592
}
578-
opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(tc)))
593+
tlsConfig := &tls.Config{
594+
InsecureSkipVerify: true,
595+
NextProtos: []string{"h1"},
596+
Certificates: []tls.Certificate{cert},
597+
}
598+
599+
opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)))
579600
} else {
580601
opts = append(opts, grpc.WithInsecure())
581602
}

server/tls.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,3 @@ func newClientCert() (cert tls.Certificate, err error) {
7272

7373
return clientCert, nil
7474
}
75-
76-
func newTLSConfig() (*tls.Config, error) {
77-
78-
certificate, err := newClientCert()
79-
if err != nil {
80-
return nil, err
81-
}
82-
tc := &tls.Config{
83-
Certificates: []tls.Certificate{certificate},
84-
InsecureSkipVerify: true,
85-
NextProtos: []string{"h1"},
86-
}
87-
return tc, nil
88-
}

0 commit comments

Comments
 (0)