Skip to content

Commit 56a1b1c

Browse files
Jason YellickLuis Sanchez
Jason Yellick
authored and
Luis Sanchez
committed
[FAB-2738] orderer.yaml TLS parameters ignored
https://jira.hyperledger.org/browse/FAB-2738 The orderer.yaml currently includes variables to specify the TLS configuration, bu they are not currently passed into the TLS server for usage. This CR translates them from the orderer TLS config format to the one required by the TLS server, and passes them in on instantiation. Also resolved in this changeset is a limitation where _FILE environment variable is not picked up unless it is overriding an existing value in a yaml configuration file. Change-Id: Ic4c099dd4b2338f0e20d0d5619f4e9376a8a9f0b Signed-off-by: Jason Yellick <[email protected]> Signed-off-by: Luis Sanchez <[email protected]>
1 parent 3295920 commit 56a1b1c

File tree

3 files changed

+122
-24
lines changed

3 files changed

+122
-24
lines changed

common/viperutil/config_test.go

+97-23
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,68 @@ func TestPEMBlocksFromFile(t *testing.T) {
247247
}
248248
}
249249

250+
func TestPEMBlocksFromFileEnv(t *testing.T) {
251+
252+
// create temp file
253+
file, err := ioutil.TempFile(os.TempDir(), "test")
254+
if err != nil {
255+
t.Fatalf("Unable to create temp file.")
256+
}
257+
defer os.Remove(file.Name())
258+
259+
numberOfCertificates := 3
260+
var pems []byte
261+
for i := 0; i < numberOfCertificates; i++ {
262+
publicKeyCert, _, err := util.GenerateMockPublicPrivateKeyPairPEM(true)
263+
if err != nil {
264+
t.Fatalf("Enable to generate a signer certificate: %v", err)
265+
}
266+
pems = append(pems, publicKeyCert...)
267+
}
268+
269+
// write temp file
270+
if err := ioutil.WriteFile(file.Name(), pems, 0666); err != nil {
271+
t.Fatalf("Unable to write to temp file: %v", err)
272+
}
273+
274+
testCases := []struct {
275+
name string
276+
data string
277+
}{
278+
{"Override", "---\nInner:\n Multiple:\n File: wrong_file"},
279+
{"NoFileElement", "---\nInner:\n Multiple:\n"},
280+
// {"NoElementAtAll", "---\nInner:\n"}, test case for another time
281+
}
282+
283+
for _, tc := range testCases {
284+
t.Run(tc.name, func(t *testing.T) {
285+
286+
envVar := "VIPERUTIL_INNER_MULTIPLE_FILE"
287+
envVal := file.Name()
288+
os.Setenv(envVar, envVal)
289+
defer os.Unsetenv(envVar)
290+
config := viper.New()
291+
config.SetEnvPrefix(Prefix)
292+
config.AutomaticEnv()
293+
replacer := strings.NewReplacer(".", "_")
294+
config.SetEnvKeyReplacer(replacer)
295+
config.SetConfigType("yaml")
296+
297+
if err := config.ReadConfig(bytes.NewReader([]byte(tc.data))); err != nil {
298+
t.Fatalf("Error reading config: %v", err)
299+
}
300+
var uconf stringFromFileConfig
301+
if err := EnhancedExactUnmarshal(config, &uconf); err != nil {
302+
t.Fatalf("Failed to unmarshall: %v", err)
303+
}
304+
305+
if len(uconf.Inner.Multiple) != 3 {
306+
t.Fatalf(`Expected: "%v", Actual: "%v"`, numberOfCertificates, len(uconf.Inner.Multiple))
307+
}
308+
})
309+
}
310+
}
311+
250312
func TestStringFromFileNotSpecified(t *testing.T) {
251313

252314
yaml := fmt.Sprintf("---\nInner:\n Single:\n File:\n")
@@ -280,33 +342,45 @@ func TestStringFromFileEnv(t *testing.T) {
280342
t.Fatalf("Unable to write to temp file.")
281343
}
282344

283-
envVar := "VIPERUTIL_INNER_SINGLE_FILE"
284-
envVal := file.Name()
285-
os.Setenv(envVar, envVal)
286-
defer os.Unsetenv(envVar)
287-
config := viper.New()
288-
config.SetEnvPrefix(Prefix)
289-
config.AutomaticEnv()
290-
replacer := strings.NewReplacer(".", "_")
291-
config.SetEnvKeyReplacer(replacer)
292-
config.SetConfigType("yaml")
293-
294-
data := "---\nInner:\n Single:\n File: wrong_file"
295-
296-
if err = config.ReadConfig(bytes.NewReader([]byte(data))); err != nil {
297-
t.Fatalf("Error reading %s plugin config: %s", Prefix, err)
345+
testCases := []struct {
346+
name string
347+
data string
348+
}{
349+
{"Override", "---\nInner:\n Single:\n File: wrong_file"},
350+
{"NoFileElement", "---\nInner:\n Single:\n"},
351+
// {"NoElementAtAll", "---\nInner:\n"}, test case for another time
298352
}
299353

300-
var uconf stringFromFileConfig
354+
for _, tc := range testCases {
355+
t.Run(tc.name, func(t *testing.T) {
356+
envVar := "VIPERUTIL_INNER_SINGLE_FILE"
357+
envVal := file.Name()
358+
os.Setenv(envVar, envVal)
359+
defer os.Unsetenv(envVar)
360+
config := viper.New()
361+
config.SetEnvPrefix(Prefix)
362+
config.AutomaticEnv()
363+
replacer := strings.NewReplacer(".", "_")
364+
config.SetEnvKeyReplacer(replacer)
365+
config.SetConfigType("yaml")
366+
367+
if err = config.ReadConfig(bytes.NewReader([]byte(tc.data))); err != nil {
368+
t.Fatalf("Error reading %s plugin config: %s", Prefix, err)
369+
}
301370

302-
err = EnhancedExactUnmarshal(config, &uconf)
303-
if err != nil {
304-
t.Fatalf("Failed to unmarshal with: %s", err)
305-
}
371+
var uconf stringFromFileConfig
306372

307-
t.Log(uconf.Inner.Single)
373+
err = EnhancedExactUnmarshal(config, &uconf)
374+
if err != nil {
375+
t.Fatalf("Failed to unmarshal with: %s", err)
376+
}
308377

309-
if !reflect.DeepEqual(uconf.Inner.Single, expectedValue) {
310-
t.Fatalf(`Expected: "%v", Actual: "%v"`, expectedValue, uconf.Inner.Single)
378+
t.Log(uconf.Inner.Single)
379+
380+
if !reflect.DeepEqual(uconf.Inner.Single, expectedValue) {
381+
t.Fatalf(`Expected: "%v", Actual: "%v"`, expectedValue, uconf.Inner.Single)
382+
}
383+
})
311384
}
385+
312386
}

common/viperutil/config_util.go

+9
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,17 @@ func getKeysRecursively(base string, v *viper.Viper, nodeKeys map[string]interfa
5959
logger.Debugf("Found real value for %s setting to map[string]string %v", fqKey, m)
6060
result[key] = m
6161
} else {
62+
if val == nil {
63+
fileSubKey := fqKey + ".File"
64+
fileVal := v.Get(fileSubKey)
65+
if fileVal != nil {
66+
result[key] = map[string]interface{}{"File": fileVal}
67+
continue
68+
}
69+
}
6270
logger.Debugf("Found real value for %s setting to %T %v", fqKey, val, val)
6371
result[key] = val
72+
6473
}
6574
}
6675
return result

orderer/main.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,24 @@ func main() {
7070
return
7171
}
7272

73+
serverRootCAs := make([][]byte, len(conf.General.TLS.RootCAs))
74+
for i, cert := range conf.General.TLS.RootCAs {
75+
serverRootCAs[i] = []byte(cert)
76+
}
77+
78+
clientRootCAs := make([][]byte, len(conf.General.TLS.ClientRootCAs))
79+
for i, cert := range conf.General.TLS.ClientRootCAs {
80+
clientRootCAs[i] = []byte(cert)
81+
}
82+
7383
// Create GRPC server - return if an error occurs
7484
secureConfig := comm.SecureServerConfig{
75-
UseTLS: conf.General.TLS.Enabled,
85+
UseTLS: conf.General.TLS.Enabled,
86+
ServerCertificate: []byte(conf.General.TLS.Certificate),
87+
ServerKey: []byte(conf.General.TLS.PrivateKey),
88+
ServerRootCAs: serverRootCAs,
89+
RequireClientCert: conf.General.TLS.ClientAuthEnabled,
90+
ClientRootCAs: clientRootCAs,
7691
}
7792
grpcServer, err := comm.NewGRPCServerFromListener(lis, secureConfig)
7893
if err != nil {

0 commit comments

Comments
 (0)