@@ -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 }
0 commit comments