@@ -67,7 +67,12 @@ func InitConfigFromBytes(configBytes []byte, configType string) (*Config, error)
6767
6868 setLogLevel (myViper )
6969
70- return & Config {tlsCertPool : x509 .NewCertPool (), configViper : myViper }, nil
70+ tlsCertPool , err := getCertPool (myViper )
71+ if err != nil {
72+ return nil , err
73+ }
74+
75+ return & Config {tlsCertPool : tlsCertPool , configViper : myViper }, nil
7176}
7277
7378// getNewViper returns a new instance of viper
@@ -111,9 +116,25 @@ func initConfigWithCmdRoot(configFile string, cmdRootPrefix string) (*Config, er
111116 }
112117
113118 setLogLevel (myViper )
119+ tlsCertPool , err := getCertPool (myViper )
120+ if err != nil {
121+ return nil , err
122+ }
114123
115124 logger .Infof ("%s logging level is set to: %s" , logModule , lu .LogLevelString (logging .GetLevel (logModule )))
116- return & Config {tlsCertPool : x509 .NewCertPool (), configViper : myViper }, nil
125+ return & Config {tlsCertPool : tlsCertPool , configViper : myViper }, nil
126+ }
127+
128+ func getCertPool (myViper * viper.Viper ) (* x509.CertPool , error ) {
129+ tlsCertPool := x509 .NewCertPool ()
130+ if myViper .GetBool ("client.systemcertpool" ) == true {
131+ var err error
132+ if tlsCertPool , err = x509 .SystemCertPool (); err != nil {
133+ return nil , err
134+ }
135+ logger .Debugf ("Loaded system cert pool of size: %d" , len (tlsCertPool .Subjects ()))
136+ }
137+ return tlsCertPool , nil
117138}
118139
119140// setLogLevel will set the log level of the client
@@ -416,9 +437,10 @@ func (c *Config) OrderersConfig() ([]apiconfig.OrdererConfig, error) {
416437 }
417438
418439 for _ , orderer := range config .Orderers {
440+
419441 if orderer .TLSCACerts .Path != "" {
420442 orderer .TLSCACerts .Path = substGoPath (orderer .TLSCACerts .Path )
421- } else if len (orderer .TLSCACerts .Pem ) == 0 {
443+ } else if len (orderer .TLSCACerts .Pem ) == 0 && c . configViper . GetBool ( "client.systemcertpool" ) == false {
422444 errors .Errorf ("Orderer has no certs configured. Make sure TLSCACerts.Pem or TLSCACerts.Path is set for %s" , orderer .URL )
423445 }
424446
@@ -479,7 +501,7 @@ func (c *Config) PeersConfig(org string) ([]apiconfig.PeerConfig, error) {
479501
480502 for _ , peerName := range peersConfig {
481503 p := config .Peers [strings .ToLower (peerName )]
482- if err = verifyPeerConfig (p , peerName , urlutil .IsTLSEnabled (p .URL )); err != nil {
504+ if err = c . verifyPeerConfig (p , peerName , urlutil .IsTLSEnabled (p .URL )); err != nil {
483505 return nil , err
484506 }
485507 if p .TLSCACerts .Path != "" {
@@ -591,7 +613,7 @@ func (c *Config) ChannelPeers(name string) ([]apiconfig.ChannelPeer, error) {
591613 return nil , errors .Errorf ("peer config not found for %s" , peerName )
592614 }
593615
594- if err = verifyPeerConfig (p , peerName , urlutil .IsTLSEnabled (p .URL )); err != nil {
616+ if err = c . verifyPeerConfig (p , peerName , urlutil .IsTLSEnabled (p .URL )); err != nil {
595617 return nil , err
596618 }
597619
@@ -626,7 +648,7 @@ func (c *Config) NetworkPeers() ([]apiconfig.NetworkPeer, error) {
626648
627649 for name , p := range netConfig .Peers {
628650
629- if err = verifyPeerConfig (p , name , urlutil .IsTLSEnabled (p .URL )); err != nil {
651+ if err = c . verifyPeerConfig (p , name , urlutil .IsTLSEnabled (p .URL )); err != nil {
630652 return nil , err
631653 }
632654
@@ -670,14 +692,14 @@ func (c *Config) PeerMspID(name string) (string, error) {
670692
671693}
672694
673- func verifyPeerConfig (p apiconfig.PeerConfig , peerName string , tlsEnabled bool ) error {
695+ func ( c * Config ) verifyPeerConfig (p apiconfig.PeerConfig , peerName string , tlsEnabled bool ) error {
674696 if p .URL == "" {
675697 return errors .Errorf ("URL does not exist or empty for peer %s" , peerName )
676698 }
677699 if p .EventURL == "" {
678700 return errors .Errorf ("event URL does not exist or empty for peer %s" , peerName )
679701 }
680- if tlsEnabled && len (p .TLSCACerts .Pem ) == 0 && p .TLSCACerts .Path == "" {
702+ if tlsEnabled && len (p .TLSCACerts .Pem ) == 0 && p .TLSCACerts .Path == "" && c . configViper . GetBool ( "client.systemcertpool" ) == false {
681703 return errors .Errorf ("tls.certificate does not exist or empty for peer %s" , peerName )
682704 }
683705 return nil
0 commit comments