Skip to content

Commit

Permalink
Merge "[FAB-3455] cryptogen: Use a FQDN for CA artifacts"
Browse files Browse the repository at this point in the history
  • Loading branch information
binhn authored and Gerrit Code Review committed May 1, 2017
2 parents 9a45c73 + cef4f79 commit 5249c6d
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 16 deletions.
4 changes: 2 additions & 2 deletions common/tools/cryptogen/ca/ca_test.go
Expand Up @@ -38,7 +38,7 @@ var testDir = filepath.Join(os.TempDir(), "ca-test")
func TestNewCA(t *testing.T) {

caDir := filepath.Join(testDir, "ca")
rootCA, err := ca.NewCA(caDir, testCAName)
rootCA, err := ca.NewCA(caDir, testCAName, testCAName)
assert.NoError(t, err, "Error generating CA")
assert.NotNil(t, rootCA, "Failed to return CA")
assert.NotNil(t, rootCA.Signer,
Expand Down Expand Up @@ -68,7 +68,7 @@ func TestGenerateSignCertificate(t *testing.T) {
assert.NotNil(t, ecPubKey, "Failed to generate signed certificate")

// create our CA
rootCA, err := ca.NewCA(caDir, testCA2Name)
rootCA, err := ca.NewCA(caDir, testCA2Name, testCA2Name)
assert.NoError(t, err, "Error generating CA")

_, err = rootCA.SignCertificate(certDir, testName, ecPubKey)
Expand Down
4 changes: 2 additions & 2 deletions common/tools/cryptogen/ca/generator.go
Expand Up @@ -40,7 +40,7 @@ type CA struct {

// NewCA creates an instance of CA and saves the signing key pair in
// baseDir/name
func NewCA(baseDir, name string) (*CA, error) {
func NewCA(baseDir, org, name string) (*CA, error) {

var response error
var ca *CA
Expand All @@ -62,7 +62,7 @@ func NewCA(baseDir, name string) (*CA, error) {

//set the organization for the subject
subject := subjectTemplate()
subject.Organization = []string{name}
subject.Organization = []string{org}
subject.CommonName = name

template.Subject = subject
Expand Down
42 changes: 33 additions & 9 deletions common/tools/cryptogen/main.go
Expand Up @@ -70,6 +70,7 @@ type UsersSpec struct {
type OrgSpec struct {
Name string `yaml:"Name"`
Domain string `yaml:"Domain"`
CA NodeSpec `yaml:"CA"`
Template NodeTemplate `yaml:"Template"`
Specs []NodeSpec `yaml:"Specs"`
Users UsersSpec `yaml:"Users"`
Expand Down Expand Up @@ -107,6 +108,15 @@ PeerOrgs:
- Name: Org1
Domain: org1.example.com
# ---------------------------------------------------------------------------
# "CA"
# ---------------------------------------------------------------------------
# Uncomment this section to enable the explicit definition of the CA for this
# organization. This entry is a Spec. See "Specs" section below for details.
# ---------------------------------------------------------------------------
# CA:
# Hostname: ca # implicitly ca.org1.example.com
# ---------------------------------------------------------------------------
# "Specs"
# ---------------------------------------------------------------------------
Expand Down Expand Up @@ -263,6 +273,15 @@ func parseTemplate(input, defaultInput string, data interface{}) (string, error)
return output.String(), nil
}

func renderCN(domain string, spec NodeSpec) (string, error) {
data := CommonNameData{
Hostname: spec.Hostname,
Domain: domain,
}

return parseTemplate(spec.CommonName, defaultCNTemplate, data)
}

func generateNodeSpec(orgSpec *OrgSpec, prefix string) error {
// First process all of our templated nodes
for i := 0; i < orgSpec.Template.Count; i++ {
Expand All @@ -281,21 +300,26 @@ func generateNodeSpec(orgSpec *OrgSpec, prefix string) error {
orgSpec.Specs = append(orgSpec.Specs, spec)
}

// And finally touch up all specs to add the domain
// Touch up all general node-specs to add the domain
for idx, spec := range orgSpec.Specs {
data := CommonNameData{
Hostname: spec.Hostname,
Domain: orgSpec.Domain,
}

finalCN, err := parseTemplate(spec.CommonName, defaultCNTemplate, data)
finalCN, err := renderCN(orgSpec.Domain, spec)
if err != nil {
return err
}

orgSpec.Specs[idx].CommonName = finalCN
}

// Process the CA node-spec in the same manner
if len(orgSpec.CA.Hostname) == 0 {
orgSpec.CA.Hostname = "ca"
}
finalCN, err := renderCN(orgSpec.Domain, orgSpec.CA)
if err != nil {
return err
}
orgSpec.CA.CommonName = finalCN

return nil
}

Expand All @@ -311,7 +335,7 @@ func generatePeerOrg(baseDir string, orgSpec OrgSpec) {
peersDir := filepath.Join(orgDir, "peers")
usersDir := filepath.Join(orgDir, "users")
adminCertsDir := filepath.Join(mspDir, "admincerts")
rootCA, err := ca.NewCA(caDir, orgName)
rootCA, err := ca.NewCA(caDir, orgName, orgSpec.CA.CommonName)
if err != nil {
fmt.Printf("Error generating CA for org %s:\n%v\n", orgName, err)
os.Exit(1)
Expand Down Expand Up @@ -407,7 +431,7 @@ func generateOrdererOrg(baseDir string, orgSpec OrgSpec) {
orderersDir := filepath.Join(orgDir, "orderers")
usersDir := filepath.Join(orgDir, "users")
adminCertsDir := filepath.Join(mspDir, "admincerts")
rootCA, err := ca.NewCA(caDir, orgName)
rootCA, err := ca.NewCA(caDir, orgName, orgSpec.CA.CommonName)
if err != nil {
fmt.Printf("Error generating CA for org %s:\n%v\n", orgName, err)
os.Exit(1)
Expand Down
7 changes: 4 additions & 3 deletions common/tools/cryptogen/msp/msp_test.go
Expand Up @@ -27,7 +27,8 @@ import (
)

const (
testCAName = "root0"
testCAOrg = "example.com"
testCAName = "ca" + "." + testCAOrg
testName = "peer0"
)

Expand All @@ -42,7 +43,7 @@ func TestGenerateLocalMSP(t *testing.T) {

caDir := filepath.Join(testDir, "ca")
mspDir := filepath.Join(testDir, "msp")
rootCA, err := ca.NewCA(caDir, testCAName)
rootCA, err := ca.NewCA(caDir, testCAOrg, testCAName)
assert.NoError(t, err, "Error generating CA")
err = msp.GenerateLocalMSP(testDir, testName, rootCA)
assert.NoError(t, err, "Failed to generate local MSP")
Expand Down Expand Up @@ -80,7 +81,7 @@ func TestGenerateVerifyingMSP(t *testing.T) {

caDir := filepath.Join(testDir, "ca")
mspDir := filepath.Join(testDir, "msp")
rootCA, err := ca.NewCA(caDir, testCAName)
rootCA, err := ca.NewCA(caDir, testCAOrg, testCAName)
assert.NoError(t, err, "Failed to create new CA")

err = msp.GenerateVerifyingMSP(mspDir, rootCA)
Expand Down

0 comments on commit 5249c6d

Please sign in to comment.