單個(gè)fabric-ca-server啟動(dòng)多個(gè)CA服務(wù)
這是一個(gè)神奇的功能枝嘶,至今也不知道這到底有什么用處蛋济。
這里只是記錄有這么一個(gè)功能旨袒,以及如何使用這個(gè)功能察绷。
要使用多CA服務(wù)的功能干签,有兩種設(shè)定方法,
- 一種是設(shè)定cacount
- 另一種是設(shè)定cafiles
不管哪種方式最終功能都類似拆撼。
下面只以設(shè)定cacount為例容劳。
- 第一步1: 初始化ca-server
$ fabric-ca-server init -b admin:adminpw --cacount 2
會(huì)創(chuàng)建三套配置文件:父ca-server和兩個(gè)子ca-server:
├── ca
│ ├── ca1
│ │ ├── ca-cert.pem
│ │ ├── fabric-ca-config.yaml
│ │ ├── fabric-ca-server_ca1.db
│ │ └── msp
│ │ └── keystore
│ │ └── 2c9210cf9314e0fff4a5ec9a21c50c98389a7b0c2b54518f7af42924e9ffdaca_sk
│ └── ca2
│ ├── ca-cert.pem
│ ├── fabric-ca-config.yaml
│ ├── fabric-ca-server_ca2.db
│ └── msp
│ └── keystore
│ └── d90879147e7dd56a1599ddb541a59c4e35aaec9dcb0076cece6d67eb522ba6c1_sk
├── ca-cert.pem
├── fabric-ca-server-config.yaml
├── fabric-ca-server.db
└── msp
└── keystore
└── 069d21d538b6ddb297abc7beb6110b91427cb27e42004a1d2a54bd9f7c785ad3_sk
兩個(gè)子ca-server的配置分別在ca/ca1和/ca/ca2目錄下面。
比較兩個(gè)個(gè)子ca-server配置的差異闸度,主要是名字不一樣竭贩。
ca/ca1/fabric-ca-config.yaml | ca/ca2/fabric-ca-config.yaml
-------------------------------------------------+---------------------------------------
ca: | ca:
# Name of this CA | # Name of this CA
name: ca1 | name: ca2
子ca-server里面關(guān)于公共的部分都存儲(chǔ)在父ca-server的配置文件里面,例如監(jiān)聽端口這些莺禁。
- 第二步留量,啟動(dòng)ca-server
$ fabric-ca-server start
啟動(dòng)了一個(gè)進(jìn)程,監(jiān)聽在一個(gè)端口哟冬,提供給三個(gè)ca-server使用楼熄。
這三個(gè)ca-server有什么關(guān)系呢?
答:什么關(guān)系也沒(méi)有浩峡,各管各的可岂。各自生產(chǎn)各自的根證書,各自完成自簽名翰灾,也不共享根證書缕粹。
這就是我的主要疑問(wèn),要這單個(gè)fabric-ca-server啟動(dòng)多個(gè)CA服務(wù)的功能有什么用纸淮?平斩??
- 第三步萎馅,使用ca-server
不管他有什么用處吧双戳,我們只管怎么用就好了虹蒋。
和單個(gè)的ca-server一樣使用糜芳,差別只是需要在命令行指定 --caname表示訪問(wèn)哪一個(gè)ca-server,如果沒(méi)有指定魄衅,則是訪問(wèn)父ca-server
enroll bootstrap用戶
$ fabric-ca-client enroll --home ca0admin --url http://admin:adminpw@localhost:7054
$ fabric-ca-client enroll --home ca1admin --url http://admin:adminpw@localhost:7054 --caname ca1
$ fabric-ca-client enroll --home ca2admin --url http://admin:adminpw@localhost:7054 --caname ca2
注冊(cè)新用戶
$ fabric-ca-client register --home ca0admin --id.name tester00 --id.secret testpasswd --id.type user --id.affiliation org1.department2
$ fabric-ca-client register --home ca1admin --id.name tester01 --id.secret testpasswd --id.type user --id.affiliation org1.department2 --caname ca1
$ fabric-ca-client register --home ca2admin --id.name tester02 --id.secret testpasswd --id.type user --id.affiliation org1.department2 --caname ca2
enroll新用戶
$ fabric-ca-client enroll --home tester00 -u http://tester00:testpasswd@localhost:7054
$ fabric-ca-client enroll --home tester01 -u http://tester01:testpasswd@localhost:7054 --caname ca1
$ fabric-ca-client enroll --home tester02 -u http://tester02:testpasswd@localhost:7054 --caname ca2
如果沒(méi)有指定指定caname錯(cuò)誤峭竣,那么訪問(wèn)就會(huì)失敗,例如:
fabric-ca-client enroll --home tester01 -u http://tester02:testpasswd@localhost:7054 --caname ca1
2018/05/17 15:03:29 [INFO] generating key: &{A:ecdsa S:256}
2018/05/17 15:03:29 [INFO] encoded CSR
Error: Response from server: Error Code: 20 - Authorization failure
因?yàn)橛脩魌ester02根本不在ca1里面晃虫,tester02是注冊(cè)到ca2里面的皆撩。
我們?cè)谶M(jìn)到CAserver內(nèi)部,可以看CA里面的數(shù)據(jù)庫(kù):
$ sqlite3 ca/ca1/fabric-ca-server_ca1.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from users;
admin|$2a$10$9R3vlQ7Qz6XfO2PaB6.lfOMMKyMVzg0lna/8wFvqEdJFTMES7xeUq|client||[{"name":"hf.Revoker","value":"1"},{"name":"hf.IntermediateCA","value":"1"},{"name":"hf.GenCRL","value":"1"},{"name":"hf.Registrar.Attributes","value":"*"},{"name":"hf.AffiliationMgr","value":"1"},{"name":"hf.Registrar.Roles","value":"peer,orderer,client,user"},{"name":"hf.Registrar.DelegateRoles","value":"peer,orderer,client,user"}]|2|-1|1
tester01|$2a$10$6qylJvSlC7UziAF8MfD26OHMLbk9oo5L7Bj2Q6hh/seZJGlbG6f2C|user|org1.department2|[{"name":"hf.EnrollmentID","value":"tester01","ecert":true},{"name":"hf.Type","value":"user","ecert":true},{"name":"hf.Affiliation","value":"org1.department2","ecert":true}]|0|-1|1
sqlite>
在ca1的數(shù)據(jù)庫(kù)里面只有admin和tester01兩個(gè)用戶名,而沒(méi)有tester00和tester02的用戶扛吞;其他兩個(gè)ca-server也一樣呻惕。