@@ -22,15 +22,15 @@ import (
22
22
"path/filepath"
23
23
24
24
"encoding/hex"
25
- "io"
26
25
27
26
"github.com/hyperledger/fabric/bccsp"
28
27
"github.com/hyperledger/fabric/bccsp/factory"
29
28
"github.com/hyperledger/fabric/common/tools/cryptogen/ca"
30
29
"github.com/hyperledger/fabric/common/tools/cryptogen/csp"
31
30
)
32
31
33
- func GenerateLocalMSP (baseDir , name string , sans []string , rootCA * ca.CA ) error {
32
+ func GenerateLocalMSP (baseDir , name string , sans []string , signCA * ca.CA ,
33
+ tlsCA * ca.CA ) error {
34
34
35
35
// create folder structure
36
36
mspDir := filepath .Join (baseDir , "msp" )
@@ -63,17 +63,22 @@ func GenerateLocalMSP(baseDir, name string, sans []string, rootCA *ca.CA) error
63
63
if err != nil {
64
64
return err
65
65
}
66
- // generate X509 certificate
67
- cert , err := rootCA .SignCertificate (filepath .Join (mspDir , "signcerts" ),
66
+ // generate X509 certificate using signing CA
67
+ cert , err := signCA .SignCertificate (filepath .Join (mspDir , "signcerts" ),
68
68
name , []string {}, ecPubKey , x509 .KeyUsageDigitalSignature , []x509.ExtKeyUsage {})
69
69
if err != nil {
70
70
return err
71
71
}
72
72
73
73
// write artifacts to MSP folders
74
74
75
- // the CA certificate goes into cacerts
76
- err = x509Export (filepath .Join (mspDir , "cacerts" , x509Filename (rootCA .Name )), rootCA .SignCert )
75
+ // the signing CA certificate goes into cacerts
76
+ err = x509Export (filepath .Join (mspDir , "cacerts" , x509Filename (signCA .Name )), signCA .SignCert )
77
+ if err != nil {
78
+ return err
79
+ }
80
+ // the TLS CA certificate goes into tlscacerts
81
+ err = x509Export (filepath .Join (mspDir , "tlscacerts" , x509Filename (tlsCA .Name )), tlsCA .SignCert )
77
82
if err != nil {
78
83
return err
79
84
}
@@ -104,22 +109,21 @@ func GenerateLocalMSP(baseDir, name string, sans []string, rootCA *ca.CA) error
104
109
if err != nil {
105
110
return err
106
111
}
107
- // generate X509 certificate
108
- _ , err = rootCA .SignCertificate (filepath .Join (tlsDir ),
112
+ // generate X509 certificate using TLS CA
113
+ _ , err = tlsCA .SignCertificate (filepath .Join (tlsDir ),
109
114
name , sans , tlsPubKey , x509 .KeyUsageDigitalSignature | x509 .KeyUsageKeyEncipherment ,
110
115
[]x509.ExtKeyUsage {x509 .ExtKeyUsageServerAuth , x509 .ExtKeyUsageClientAuth })
111
116
if err != nil {
112
117
return err
113
118
}
114
- err = x509Export (filepath .Join (tlsDir , "ca.crt" ), rootCA .SignCert )
119
+ err = x509Export (filepath .Join (tlsDir , "ca.crt" ), tlsCA .SignCert )
115
120
if err != nil {
116
121
return err
117
122
}
118
123
119
124
// rename the generated TLS X509 cert
120
125
err = os .Rename (filepath .Join (tlsDir , x509Filename (name )),
121
126
filepath .Join (tlsDir , "server.crt" ))
122
- //err = x509Export(filepath.Join(tlsDir, "server.crt"), tlsCert)
123
127
if err != nil {
124
128
return err
125
129
}
@@ -132,19 +136,20 @@ func GenerateLocalMSP(baseDir, name string, sans []string, rootCA *ca.CA) error
132
136
return nil
133
137
}
134
138
135
- func GenerateVerifyingMSP (baseDir string , rootCA * ca.CA ) error {
139
+ func GenerateVerifyingMSP (baseDir string , signCA * ca. CA , tlsCA * ca.CA ) error {
136
140
137
- // create folder structure
141
+ // create folder structure and write artifacts to proper locations
138
142
err := createFolderStructure (baseDir , false )
139
143
if err == nil {
140
- // write MSP cert to appropriate folders
141
- //folders := []string{"cacerts", "signcerts"}
142
- folders := []string {"cacerts" }
143
- for _ , folder := range folders {
144
- err = x509Export (filepath .Join (baseDir , folder , x509Filename (rootCA .Name )), rootCA .SignCert )
145
- if err != nil {
146
- return err
147
- }
144
+ // the signing CA certificate goes into cacerts
145
+ err = x509Export (filepath .Join (baseDir , "cacerts" , x509Filename (signCA .Name )), signCA .SignCert )
146
+ if err != nil {
147
+ return err
148
+ }
149
+ // the TLS CA certificate goes into tlscacerts
150
+ err = x509Export (filepath .Join (baseDir , "tlscacerts" , x509Filename (tlsCA .Name )), tlsCA .SignCert )
151
+ if err != nil {
152
+ return err
148
153
}
149
154
}
150
155
@@ -153,13 +158,14 @@ func GenerateVerifyingMSP(baseDir string, rootCA *ca.CA) error {
153
158
// cleared up anyway by copyAdminCert, but
154
159
// we leave a valid admin for now for the sake
155
160
// of unit tests
161
+ factory .InitFactories (nil )
156
162
bcsp := factory .GetDefault ()
157
163
priv , err := bcsp .KeyGen (& bccsp.ECDSAP256KeyGenOpts {Temporary : true })
158
164
ecPubKey , err := csp .GetECPublicKey (priv )
159
165
if err != nil {
160
166
return err
161
167
}
162
- _ , err = rootCA .SignCertificate (filepath .Join (baseDir , "admincerts" ), rootCA .Name ,
168
+ _ , err = signCA .SignCertificate (filepath .Join (baseDir , "admincerts" ), signCA .Name ,
163
169
[]string {"" }, ecPubKey , x509 .KeyUsageDigitalSignature , []x509.ExtKeyUsage {})
164
170
if err != nil {
165
171
return err
@@ -175,6 +181,7 @@ func createFolderStructure(rootDir string, local bool) error {
175
181
folders = []string {
176
182
filepath .Join (rootDir , "admincerts" ),
177
183
filepath .Join (rootDir , "cacerts" ),
184
+ filepath .Join (rootDir , "tlscacerts" ),
178
185
}
179
186
if local {
180
187
folders = append (folders , filepath .Join (rootDir , "keystore" ),
@@ -199,25 +206,6 @@ func x509Export(path string, cert *x509.Certificate) error {
199
206
return pemExport (path , "CERTIFICATE" , cert .Raw )
200
207
}
201
208
202
- func copyFile (src , dst string ) error {
203
- in , err := os .Open (src )
204
- if err != nil {
205
- return err
206
- }
207
- defer in .Close ()
208
- out , err := os .Create (dst )
209
- if err != nil {
210
- return err
211
- }
212
- defer out .Close ()
213
- _ , err = io .Copy (out , in )
214
- cerr := out .Close ()
215
- if err != nil {
216
- return err
217
- }
218
- return cerr
219
- }
220
-
221
209
func keyExport (keystore , output string , key bccsp.Key ) error {
222
210
id := hex .EncodeToString (key .SKI ())
223
211
0 commit comments