Skip to content

Commit 632c4f7

Browse files
authored
Treat enablement of TLS separately for server and client config (#2501)
1 parent f6e84df commit 632c4f7

File tree

4 files changed

+49
-14
lines changed

4 files changed

+49
-14
lines changed

common/config/config.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -484,9 +484,12 @@ func (c *Config) String() string {
484484
return maskedYaml
485485
}
486486

487-
func (r *GroupTLS) IsEnabled() bool {
488-
return r.Server.KeyFile != "" || r.Server.KeyData != "" ||
489-
len(r.Client.RootCAFiles) > 0 || len(r.Client.RootCAData) > 0 ||
487+
func (r *GroupTLS) IsServerEnabled() bool {
488+
return r.Server.KeyFile != "" || r.Server.KeyData != ""
489+
}
490+
491+
func (r *GroupTLS) IsClientEnabled() bool {
492+
return len(r.Client.RootCAFiles) > 0 || len(r.Client.RootCAData) > 0 ||
490493
r.Client.ForceTLS
491494
}
492495

common/rpc/encryption/localStoreTlsProvider.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func (s *localStoreTlsProvider) GetInternodeClientConfig() (*tls.Config, error)
130130
return newClientTLSConfig(s.internodeClientCertProvider, client.ServerName,
131131
s.settings.Internode.Server.RequireClientAuth, false, !client.DisableHostVerification)
132132
},
133-
s.settings.Internode.IsEnabled(),
133+
s.settings.Internode.IsClientEnabled(),
134134
)
135135
}
136136

@@ -143,7 +143,7 @@ func (s *localStoreTlsProvider) GetFrontendClientConfig() (*tls.Config, error) {
143143
useTLS = true
144144
} else {
145145
client = &s.settings.Frontend.Client
146-
useTLS = s.settings.Frontend.IsEnabled()
146+
useTLS = s.settings.Frontend.IsClientEnabled()
147147
}
148148
return s.getOrCreateConfig(
149149
&s.cachedFrontendClientConfig,
@@ -161,7 +161,7 @@ func (s *localStoreTlsProvider) GetFrontendServerConfig() (*tls.Config, error) {
161161
func() (*tls.Config, error) {
162162
return newServerTLSConfig(s.frontendCertProvider, s.frontendPerHostCertProviderMap, &s.settings.Frontend, s.logger)
163163
},
164-
s.settings.Frontend.IsEnabled())
164+
s.settings.Frontend.IsServerEnabled())
165165
}
166166

167167
func (s *localStoreTlsProvider) GetInternodeServerConfig() (*tls.Config, error) {
@@ -170,7 +170,7 @@ func (s *localStoreTlsProvider) GetInternodeServerConfig() (*tls.Config, error)
170170
func() (*tls.Config, error) {
171171
return newServerTLSConfig(s.internodeCertProvider, nil, &s.settings.Internode, s.logger)
172172
},
173-
s.settings.Internode.IsEnabled())
173+
s.settings.Internode.IsServerEnabled())
174174
}
175175

176176
func (s *localStoreTlsProvider) GetExpiringCerts(timeWindow time.Duration,

common/rpc/encryption/tls_config_test.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,27 @@ func (s *tlsConfigTest) SetupTest() {
5151
func (s *tlsConfigTest) TestIsEnabled() {
5252

5353
emptyCfg := config.GroupTLS{}
54-
s.False(emptyCfg.IsEnabled())
54+
s.False(emptyCfg.IsServerEnabled())
55+
s.False(emptyCfg.IsClientEnabled())
5556
cfg := config.GroupTLS{Server: config.ServerTLS{KeyFile: "foo"}}
56-
s.True(cfg.IsEnabled())
57+
s.True(cfg.IsServerEnabled())
58+
s.False(cfg.IsClientEnabled())
5759
cfg = config.GroupTLS{Server: config.ServerTLS{KeyData: "foo"}}
58-
s.True(cfg.IsEnabled())
60+
s.True(cfg.IsServerEnabled())
61+
s.False(cfg.IsClientEnabled())
5962
cfg = config.GroupTLS{Client: config.ClientTLS{RootCAFiles: []string{"bar"}}}
60-
s.True(cfg.IsEnabled())
63+
s.False(cfg.IsServerEnabled())
64+
s.True(cfg.IsClientEnabled())
6165
cfg = config.GroupTLS{Client: config.ClientTLS{RootCAData: []string{"bar"}}}
62-
s.True(cfg.IsEnabled())
66+
s.False(cfg.IsServerEnabled())
67+
s.True(cfg.IsClientEnabled())
6368
cfg = config.GroupTLS{Client: config.ClientTLS{ForceTLS: true}}
64-
s.True(cfg.IsEnabled())
69+
s.False(cfg.IsServerEnabled())
70+
s.True(cfg.IsClientEnabled())
6571
cfg = config.GroupTLS{Client: config.ClientTLS{ForceTLS: false}}
66-
s.False(cfg.IsEnabled())
72+
s.False(cfg.IsServerEnabled())
73+
s.False(cfg.IsClientEnabled())
74+
6775
}
6876

6977
func (s *tlsConfigTest) TestIsSystemWorker() {

common/rpc/test/rpc_localstore_tls_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ type localStoreRPCSuite struct {
7676
internodeDynamicTLSFactory *TestFactory
7777
internodeMutualTLSRPCRefreshFactory *TestFactory
7878
frontendMutualTLSRPCRefreshFactory *TestFactory
79+
frontendConfigRootCAForceTLSFactory *TestFactory
7980

8081
internodeCertDir string
8182
frontendCertDir string
@@ -101,6 +102,7 @@ type localStoreRPCSuite struct {
101102
frontendConfigMutualTLS config.GroupTLS
102103
frontendConfigPerHostOverrides config.GroupTLS
103104
frontendConfigRootCAOnly config.GroupTLS
105+
frontendConfigRootCAForceTLS config.GroupTLS
104106
frontendConfigAltRootCAOnly config.GroupTLS
105107
frontendConfigSystemWorker config.WorkerTLS
106108
frontendConfigMutualTLSRefresh config.GroupTLS
@@ -201,6 +203,9 @@ func (s *localStoreRPCSuite) SetupSuite() {
201203
RootCAData: []string{convertFileToBase64(s.frontendChain.CaPubFile)},
202204
},
203205
}
206+
s.frontendConfigRootCAForceTLS = s.frontendConfigRootCAOnly
207+
s.frontendConfigRootCAForceTLS.Client.ForceTLS = true
208+
204209
s.frontendConfigAltRootCAOnly = config.GroupTLS{
205210
Server: config.ServerTLS{
206211
RequireClientAuth: true,
@@ -319,6 +324,13 @@ func (s *localStoreRPCSuite) setupFrontend() {
319324
},
320325
}
321326

327+
localStoreRootCAForceTLS := &config.Global{
328+
Membership: s.membershipConfig,
329+
TLS: config.RootTLS{
330+
Frontend: s.frontendConfigRootCAForceTLS,
331+
},
332+
}
333+
322334
provider, err := encryption.NewTLSConfigProviderFromConfig(localStoreMutualTLS.TLS, nil, s.logger, nil)
323335
s.NoError(err)
324336
frontendMutualTLSFactory := rpc.NewFactory(rpcTestCfgDefault, "tester", s.logger, provider, dynamicconfig.NewNoopCollection())
@@ -355,6 +367,12 @@ func (s *localStoreRPCSuite) setupFrontend() {
355367
s.internodeDynamicTLSFactory = i(dynamicServerTLSFactory)
356368

357369
s.frontendMutualTLSRPCRefreshFactory = f(frontendMutualTLSRefreshFactory)
370+
371+
provider, err = encryption.NewTLSConfigProviderFromConfig(localStoreRootCAForceTLS.TLS, nil, s.logger, nil)
372+
s.NoError(err)
373+
frontendRootCAForceTLSFactory := rpc.NewFactory(rpcTestCfgDefault, "tester", s.logger, provider, dynamicconfig.NewNoopCollection())
374+
s.NotNil(frontendServerTLSFactory)
375+
s.frontendConfigRootCAForceTLSFactory = f(frontendRootCAForceTLSFactory)
358376
}
359377

360378
func (s *localStoreRPCSuite) setupInternode() {
@@ -789,3 +807,9 @@ func runRingpopTLSTest(s suite.Suite, logger log.Logger, serverA *TestFactory, s
789807
s.NoError(err)
790808
}
791809
}
810+
811+
func (s *localStoreRPCSuite) TestClientForceTLS() {
812+
options, err := s.frontendConfigRootCAForceTLSFactory.RPCFactory.GetFrontendGRPCServerOptions()
813+
s.NoError(err)
814+
s.Nil(options)
815+
}

0 commit comments

Comments
 (0)