Skip to content
This repository was archived by the owner on Apr 25, 2025. It is now read-only.

Commit eac4440

Browse files
committed
[FAB-3255] Added creating orderer with root CAs
Change-Id: Ia1df735bd105fb64330550f94dcf7b1c8c38bbc8 Signed-off-by: Emir Heidinger <emir.heidinger@securekey.com>
1 parent 948f36d commit eac4440

File tree

2 files changed

+62
-13
lines changed

2 files changed

+62
-13
lines changed

config/config.go

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ package config
2222
import (
2323
"crypto/x509"
2424
"encoding/pem"
25+
"errors"
2526
"fmt"
2627
"io/ioutil"
2728
"os"
@@ -189,7 +190,28 @@ func GetTLSCACertPool(tlsCertificate string) (*x509.CertPool, error) {
189190
return nil, err
190191
}
191192

192-
certPool.AddCert(loadCAKey(rawData))
193+
cert, err := loadCAKey(rawData)
194+
if err != nil {
195+
return nil, err
196+
}
197+
198+
certPool.AddCert(cert)
199+
}
200+
201+
return certPool, nil
202+
}
203+
204+
// GetTLSCACertPoolFromRoots ...
205+
func GetTLSCACertPoolFromRoots(ordererRootCAs [][]byte) (*x509.CertPool, error) {
206+
certPool := x509.NewCertPool()
207+
208+
for _, root := range ordererRootCAs {
209+
cert, err := loadCAKey(root)
210+
if err != nil {
211+
return nil, err
212+
}
213+
214+
certPool.AddCert(cert)
193215
}
194216

195217
return certPool, nil
@@ -247,12 +269,16 @@ func GetKeyStorePath() string {
247269
}
248270

249271
// loadCAKey
250-
func loadCAKey(rawData []byte) *x509.Certificate {
272+
func loadCAKey(rawData []byte) (*x509.Certificate, error) {
251273
block, _ := pem.Decode(rawData)
252274

253-
pub, err := x509.ParseCertificate(block.Bytes)
254-
if err != nil {
255-
panic(err)
275+
if block != nil {
276+
pub, err := x509.ParseCertificate(block.Bytes)
277+
if err != nil {
278+
return nil, errors.New("Failed to parse certificate: " + err.Error())
279+
}
280+
281+
return pub, nil
256282
}
257-
return pub
283+
return nil, errors.New("No pem data found")
258284
}

fabric-client/orderer.go

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ limitations under the License.
2020
package fabricclient
2121

2222
import (
23+
"crypto/x509"
2324
"fmt"
2425
"io"
2526
"strings"
@@ -48,19 +49,41 @@ type orderer struct {
4849

4950
// CreateNewOrderer Returns a Orderer instance
5051
func CreateNewOrderer(url string, certificate string, serverHostOverride string) (Orderer, error) {
51-
var opts []grpc.DialOption
52-
opts = append(opts, grpc.WithTimeout(time.Second*3))
5352
if config.IsTLSEnabled() {
5453
tlsCaCertPool, err := config.GetTLSCACertPool(certificate)
5554
if err != nil {
5655
return nil, err
5756
}
58-
creds := credentials.NewClientTLSFromCert(tlsCaCertPool, serverHostOverride)
59-
opts = append(opts, grpc.WithTransportCredentials(creds))
60-
} else {
61-
opts = append(opts, grpc.WithInsecure())
57+
return createNewOrdererWithCertPool(url, tlsCaCertPool, serverHostOverride), nil
58+
}
59+
return createNewOrdererWithoutTLS(url), nil
60+
}
61+
62+
// CreateNewOrdererWithRootCAs Returns a new Orderer instance using the passed in orderer root CAs
63+
func CreateNewOrdererWithRootCAs(url string, ordererRootCAs [][]byte, serverHostOverride string) (Orderer, error) {
64+
if config.IsTLSEnabled() {
65+
tlsCaCertPool, err := config.GetTLSCACertPoolFromRoots(ordererRootCAs)
66+
if err != nil {
67+
return nil, err
68+
}
69+
return createNewOrdererWithCertPool(url, tlsCaCertPool, serverHostOverride), nil
6270
}
63-
return &orderer{url: url, grpcDialOption: opts}, nil
71+
return createNewOrdererWithoutTLS(url), nil
72+
}
73+
74+
func createNewOrdererWithoutTLS(url string) Orderer {
75+
var opts []grpc.DialOption
76+
opts = append(opts, grpc.WithTimeout(time.Second*3))
77+
opts = append(opts, grpc.WithInsecure())
78+
return &orderer{url: url, grpcDialOption: opts}
79+
}
80+
81+
func createNewOrdererWithCertPool(url string, tlsCaCertPool *x509.CertPool, serverHostOverride string) Orderer {
82+
var opts []grpc.DialOption
83+
opts = append(opts, grpc.WithTimeout(time.Second*3))
84+
creds := credentials.NewClientTLSFromCert(tlsCaCertPool, serverHostOverride)
85+
opts = append(opts, grpc.WithTransportCredentials(creds))
86+
return &orderer{url: url, grpcDialOption: opts}
6487
}
6588

6689
// GetURL Get the Orderer url. Required property for the instance objects.

0 commit comments

Comments
 (0)