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

Commit e8566fe

Browse files
committed
[FAB-10279] pinning script updates for fabric-ca
- no logic changes in SDK - internal pkg updated to latest fabric-ca-client Change-Id: I5f24cc0f30674f1e4ba2067be988cc2adf21e054 Signed-off-by: Sudesh Shetty <sudesh.shetty@securekey.com>
1 parent e255416 commit e8566fe

File tree

11 files changed

+236
-134
lines changed

11 files changed

+236
-134
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ FABRIC_DEV_REGISTRY_PRE_CMD ?= docker login -u docker -p docker nexus3.hyperledg
6464

6565
# Upstream fabric patching (overridable)
6666
THIRDPARTY_FABRIC_CA_BRANCH ?= master
67-
THIRDPARTY_FABRIC_CA_COMMIT ?= 77dc5a6c072721e5e5c840391215c4146b72bef2
67+
THIRDPARTY_FABRIC_CA_COMMIT ?= 2032d7736ec3254f7ad2555770743b90c5956274
6868
THIRDPARTY_FABRIC_BRANCH ?= master
6969
THIRDPARTY_FABRIC_COMMIT ?= d78be9f4567d98e8c14542446a85ec5f8fcb5e5a
7070

internal/github.com/hyperledger/fabric-ca/lib/client.go

Lines changed: 92 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"net/url"
2121
"os"
2222
"path"
23+
"path/filepath"
2324
"strconv"
2425
"strings"
2526

@@ -110,6 +111,17 @@ func (c *Client) Init() error {
110111
return errors.Wrap(err, "Failed to create cacerts directory")
111112
}
112113

114+
// CA's Idemix public key
115+
c.ipkFile = filepath.Join(mspDir, "IssuerPublicKey")
116+
117+
// Idemix credentials directory
118+
c.idemixCredsDir = path.Join(mspDir, "user")
119+
err = os.MkdirAll(c.idemixCredsDir, 0755)
120+
if err != nil {
121+
return errors.Wrap(err, "Failed to create Idemix credentials directory 'user'")
122+
}
123+
c.idemixCredFile = path.Join(c.idemixCredsDir, "SignerConfig")
124+
113125
c.csp = cfg.CSP
114126
// Create http.Client object and associate it with this client
115127
err = c.initHTTPClient()
@@ -132,6 +144,8 @@ func (c *Client) initHTTPClient() error {
132144
if err2 != nil {
133145
return fmt.Errorf("Failed to get client TLS config: %s", err2)
134146
}
147+
// set the default ciphers
148+
tlsConfig.CipherSuites = tls.DefaultCipherSuites
135149
tr.TLSClientConfig = tlsConfig
136150
}
137151
c.httpClient = &http.Client{Transport: tr}
@@ -204,6 +218,56 @@ func (c *Client) net2LocalServerInfo(net *common.CAInfoResponseNet, local *GetCA
204218
return nil
205219
}
206220

221+
func (c *Client) handleX509Enroll(req *api.EnrollmentRequest) (*EnrollmentResponse, error) {
222+
// Generate the CSR
223+
csrPEM, key, err := c.GenCSR(req.CSR, req.Name)
224+
if err != nil {
225+
return nil, errors.WithMessage(err, "Failure generating CSR")
226+
}
227+
228+
reqNet := &api.EnrollmentRequestNet{
229+
CAName: req.CAName,
230+
AttrReqs: req.AttrReqs,
231+
}
232+
233+
if req.CSR != nil {
234+
reqNet.SignRequest.Hosts = req.CSR.Hosts
235+
}
236+
reqNet.SignRequest.Request = string(csrPEM)
237+
reqNet.SignRequest.Profile = req.Profile
238+
reqNet.SignRequest.Label = req.Label
239+
240+
body, err := util.Marshal(reqNet, "SignRequest")
241+
if err != nil {
242+
return nil, err
243+
}
244+
245+
// Send the CSR to the fabric-ca server with basic auth header
246+
post, err := c.newPost("enroll", body)
247+
if err != nil {
248+
return nil, err
249+
}
250+
post.SetBasicAuth(req.Name, req.Secret)
251+
var result common.EnrollmentResponseNet
252+
err = c.SendReq(post, &result)
253+
if err != nil {
254+
return nil, err
255+
}
256+
257+
// Create the enrollment response
258+
return c.newEnrollmentResponse(&result, req.Name, key)
259+
}
260+
261+
// Handles enrollment request for an Idemix credential
262+
// 1. Sends a request with empty body to the /api/v1/idemix/credentail REST endpoint
263+
// of the server to get a Nonce from the CA
264+
// 2. Constructs a credential request using the nonce, CA's idemix public key
265+
// 3. Sends a request with the CredentialRequest object in the body to the
266+
// /api/v1/idemix/credentail REST endpoint to get a credential
267+
func (c *Client) handleIdemixEnroll(req *api.EnrollmentRequest) (*EnrollmentResponse, error) {
268+
return nil, errors.New("idemix enroll not supported")
269+
}
270+
207271
// newEnrollmentResponse creates a client enrollment response from a network response
208272
// @param result The result from server
209273
// @param id Name of identity being enrolled or reenrolled
@@ -218,7 +282,6 @@ func (c *Client) newEnrollmentResponse(result *common.EnrollmentResponseNet, id
218282
if err != nil {
219283
return nil, err
220284
}
221-
222285
x509Cred := x509cred.NewCredential(key, certByte, c)
223286
err = x509Cred.SetVal(signer)
224287
if err != nil {
@@ -287,6 +350,16 @@ func (c *Client) NewIdentity(creds []credential.Credential) (*Identity, error) {
287350
return NewIdentity(c, name, creds), nil
288351
}
289352

353+
// NewX509Identity creates a new identity
354+
func (c *Client) NewX509Identity(name string, creds []credential.Credential) x509cred.Identity {
355+
return NewIdentity(c, name, creds)
356+
}
357+
358+
// GetCSP returns BCCSP instance associated with this client
359+
func (c *Client) GetCSP() core.CryptoSuite {
360+
return c.csp
361+
}
362+
290363
// newGet create a new GET request
291364
func (c *Client) newGet(endpoint string) (*http.Request, error) {
292365
curl, err := c.getURL(endpoint)
@@ -442,6 +515,24 @@ func (c *Client) getURL(endpoint string) (string, error) {
442515
return rtn, nil
443516
}
444517

518+
func (c *Client) checkX509Enrollment() error {
519+
keyFileExists := util.FileExists(c.keyFile)
520+
certFileExists := util.FileExists(c.certFile)
521+
if keyFileExists && certFileExists {
522+
return nil
523+
}
524+
// If key file does not exist, but certFile does, key file is probably
525+
// stored by bccsp, so check to see if this is the case
526+
if certFileExists {
527+
_, _, _, err := util.GetSignerFromCertFile(c.certFile, c.csp)
528+
if err == nil {
529+
// Yes, the key is stored by BCCSP
530+
return nil
531+
}
532+
}
533+
return errors.New("X509 enrollment information does not exist")
534+
}
535+
445536
func newCfsslBasicKeyRequest(bkr *api.BasicKeyRequest) *csr.BasicKeyRequest {
446537
return &csr.BasicKeyRequest{A: bkr.Algo, S: bkr.Size}
447538
}
@@ -481,86 +572,3 @@ func NormalizeURL(addr string) (*url.URL, error) {
481572
}
482573
return u, nil
483574
}
484-
485-
// Handles enrollment request for an Idemix credential
486-
// 1. Sends a request with empty body to the /api/v1/idemix/credentail REST endpoint
487-
// of the server to get a Nonce from the CA
488-
// 2. Constructs a credential request using the nonce, CA's idemix public key
489-
// 3. Sends a request with the CredentialRequest object in the body to the
490-
// /api/v1/idemix/credentail REST endpoint to get a credential
491-
func (c *Client) handleIdemixEnroll(req *api.EnrollmentRequest) (*EnrollmentResponse, error) {
492-
log.Debugf("Getting nonce from CA %s", req.CAName)
493-
return nil, errors.New("idemix enroll not supported")
494-
}
495-
496-
func (c *Client) checkX509Enrollment() error {
497-
keyFileExists := util.FileExists(c.keyFile)
498-
certFileExists := util.FileExists(c.certFile)
499-
if keyFileExists && certFileExists {
500-
return nil
501-
}
502-
// If key file does not exist, but certFile does, key file is probably
503-
// stored by bccsp, so check to see if this is the case
504-
if certFileExists {
505-
certBytes, err := util.ReadFile(c.certFile)
506-
if err != nil {
507-
return err
508-
}
509-
_, _, _, err = util.GetSignerFromCertFile(certBytes, c.csp)
510-
if err == nil {
511-
// Yes, the key is stored by BCCSP
512-
return nil
513-
}
514-
}
515-
return errors.New("X509 enrollment information does not exist")
516-
}
517-
518-
func (c *Client) handleX509Enroll(req *api.EnrollmentRequest) (*EnrollmentResponse, error) {
519-
// Generate the CSR
520-
csrPEM, key, err := c.GenCSR(req.CSR, req.Name)
521-
if err != nil {
522-
return nil, errors.WithMessage(err, "Failure generating CSR")
523-
}
524-
525-
reqNet := &api.EnrollmentRequestNet{
526-
CAName: req.CAName,
527-
AttrReqs: req.AttrReqs,
528-
}
529-
530-
if req.CSR != nil {
531-
reqNet.SignRequest.Hosts = req.CSR.Hosts
532-
}
533-
reqNet.SignRequest.Request = string(csrPEM)
534-
reqNet.SignRequest.Profile = req.Profile
535-
reqNet.SignRequest.Label = req.Label
536-
537-
body, err := util.Marshal(reqNet, "SignRequest")
538-
if err != nil {
539-
return nil, err
540-
}
541-
542-
// Send the CSR to the fabric-ca server with basic auth header
543-
post, err := c.newPost("enroll", body)
544-
if err != nil {
545-
return nil, err
546-
}
547-
post.SetBasicAuth(req.Name, req.Secret)
548-
var result common.EnrollmentResponseNet
549-
err = c.SendReq(post, &result)
550-
if err != nil {
551-
return nil, err
552-
}
553-
554-
// Create the enrollment response
555-
return c.newEnrollmentResponse(&result, req.Name, key)
556-
}
557-
558-
// GetCSP returns BCCSP instance associated with this client
559-
func (c *Client) GetCSP() core.CryptoSuite {
560-
return c.csp
561-
}
562-
563-
// NewX509Identity creates a new identity
564-
func (c *Client) NewX509Identity(name string, creds []credential.Credential) x509cred.Identity {
565-
return NewIdentity(c, name, creds)
566-
}

internal/github.com/hyperledger/fabric-ca/lib/client/credential/credential.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ Copyright IBM Corp. All Rights Reserved.
33
44
SPDX-License-Identifier: Apache-2.0
55
*/
6+
/*
7+
Notice: This file has been modified for Hyperledger Fabric SDK Go usage.
8+
Please review third_party pinning scripts and patches for more details.
9+
*/
610

711
package credential
812

internal/github.com/hyperledger/fabric-ca/lib/client/credential/x509/credential.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,26 @@ Copyright IBM Corp. All Rights Reserved.
33
44
SPDX-License-Identifier: Apache-2.0
55
*/
6+
/*
7+
Notice: This file has been modified for Hyperledger Fabric SDK Go usage.
8+
Please review third_party pinning scripts and patches for more details.
9+
*/
610

711
package x509
812

913
import (
1014
"encoding/hex"
15+
16+
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
17+
1118
"net/http"
1219

13-
"github.com/cloudflare/cfssl/log"
20+
factory "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/sdkpatch/cryptosuitebridge"
21+
log "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/sdkpatch/logbridge"
22+
1423
"github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/api"
1524
"github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/lib/client/credential"
16-
factory "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/sdkpatch/cryptosuitebridge"
1725
"github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util"
18-
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
1926
"github.com/pkg/errors"
2027
)
2128

@@ -86,7 +93,6 @@ func (cred *Credential) SetVal(val interface{}) error {
8693
// loaded from the location specified by the keyFile attribute, if the
8794
// private key is not found in the keystore managed by BCCSP
8895
func (cred *Credential) Load() error {
89-
9096
var err error
9197
cred.val, err = NewSigner(cred.keyFile, cred.certFile)
9298
if err != nil {

internal/github.com/hyperledger/fabric-ca/lib/client/credential/x509/signer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ Copyright IBM Corp. All Rights Reserved.
33
44
SPDX-License-Identifier: Apache-2.0
55
*/
6+
/*
7+
Notice: This file has been modified for Hyperledger Fabric SDK Go usage.
8+
Please review third_party pinning scripts and patches for more details.
9+
*/
610

711
package x509
812

internal/github.com/hyperledger/fabric-ca/lib/common/serverresponses.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ Copyright IBM Corp. All Rights Reserved.
33
44
SPDX-License-Identifier: Apache-2.0
55
*/
6+
/*
7+
Notice: This file has been modified for Hyperledger Fabric SDK Go usage.
8+
Please review third_party pinning scripts and patches for more details.
9+
*/
610

711
package common
812

internal/github.com/hyperledger/fabric-ca/lib/identity.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ import (
2626
"github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util"
2727
)
2828

29+
// Identity is fabric-ca's implementation of an identity
30+
type Identity struct {
31+
name string
32+
client *Client
33+
creds []credential.Credential
34+
}
35+
2936
// NewIdentity is the constructor for identity
3037
func NewIdentity(client *Client, name string, creds []credential.Credential) *Identity {
3138
id := new(Identity)
@@ -35,13 +42,6 @@ func NewIdentity(client *Client, name string, creds []credential.Credential) *Id
3542
return id
3643
}
3744

38-
// Identity is fabric-ca's implementation of an identity
39-
type Identity struct {
40-
name string
41-
client *Client
42-
creds []credential.Credential
43-
}
44-
4545
// GetName returns the identity name
4646
func (i *Identity) GetName() string {
4747
return i.name
@@ -333,12 +333,11 @@ func (i *Identity) addTokenAuthHdr(req *http.Request, body []byte) error {
333333
var token string
334334
var err error
335335
for _, cred := range i.creds {
336-
if cred.Type() == x509.CredType {
337-
token, err = cred.CreateToken(req, body)
338-
if err != nil {
339-
return errors.WithMessage(err, "Failed to add token authorization header")
340-
}
336+
token, err = cred.CreateToken(req, body)
337+
if err != nil {
338+
return errors.WithMessage(err, "Failed to add token authorization header")
341339
}
340+
break
342341
}
343342
req.Header.Set("authorization", token)
344343
return nil

internal/github.com/hyperledger/fabric-ca/lib/tls/tls.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ import (
3333
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
3434
)
3535

36+
// DefaultCipherSuites is a set of strong TLS cipher suites
37+
var DefaultCipherSuites = []uint16{
38+
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
39+
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
40+
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
41+
tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
42+
tls.TLS_RSA_WITH_AES_128_GCM_SHA256,
43+
tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
44+
}
45+
3646
// ClientTLSConfig defines the key material for a TLS client
3747
type ClientTLSConfig struct {
3848
Enabled bool `skip:"true"`

0 commit comments

Comments
 (0)