部署一个fabric-ca
创建一个由两个组织org1.example.com
和org2.example.com
组成的的联盟
1 | 还有一个组织example.com用来部署orderer。 |
启动fabric-ca
1 | fabirc-ca的编译: |
生成fabric-ca admin的凭证
1 | mkdir /root/fabric-deploy |
创建联盟
1 | 上面的启动方式默认会创建两个组织: |
为每个组织准备msp
1 | 就是从Fabric-CA中,读取出用来签署用户的根证书等。 |
注册example.com的管理员Admin@example.com
可以直接用命令行(命令比较长,这里用\\
截断了):
1 | fabric-ca-client register --id.name Admin@example.com --id.type client --id.affiliation "com.example.org1" \ |
也可以将命令行参数写在fabric-ca admin的配置文件fabric-ca-files/admin/fabric-ca-client-config.yaml
中。
1 | $ ls fabric-ca-files/admin/admin/ |
为了演示清楚,这里使用修改配置文件的方式,将fabric-ca-files/admin/fabric-ca-client-config.yaml
其中的id
部分修改为:
1 | id: |
注意最后一行role属性,是我们自定义
的属性,对于自定义的属性,要设置certs,在配置文件中需要单独设置ecert属性为true或者false
。如果在命令行中,添加后缀:ecert
表示true,例如:
1 | fabric-ca-client register --id.affiliation "com.example.org1" --id.attrs "role=admin:ecert" |
直接执行下面的命令,即可完成用户`Admin@example.com`注册,注意这时候的注册使用fabricCA的admin账号完成的:
1 | fabric-ca-client register -H `pwd`/fabric-ca-files/admin --id.secret=password |
如果不用--id.secret
指定密码,会自动生成密码。
其它配置的含义是用户名为`Admin@example.com,类型是
client,它能够管理
com.example.*`下的用户,如下:
1 | --id.name Admin@example.com //用户名 |
完成注册之后,还需生成Admin@example.com凭证:
1 | $ mkdir -p ./fabric-ca-files/example.com/admin |
这时候可以用Admin@example.com的身份查看联盟:
1 | $ fabric-ca-client affiliation list -H `pwd`/fabric-ca-files/example.com/admin |
最后将Admin@example.com的证书复制到example.com/msp/admincerts/中:
1 | mkdir fabric-ca-files/example.com/msp/admincerts/ |
注册org1.example.com的管理员Admin@org1.example.com
为org1.example.com的管理员Admin@org1.example.com准备一个目录:
1 | cd ~/fabric-deploy |
将fabric-ca-files/admin/fabric-ca-client-config.yaml
其中的id
部分修改为:
1 | id: |
注册:
1 | fabric-ca-client register -H `pwd`/fabric-ca-files/admin --id.secret=password |
生成凭证:
1 | $ fabric-ca-client enroll -u http://Admin@org1.example.com:password@localhost:7054 -H `pwd`/fabric-ca-files/org1.example.com/admin |
查看联盟:
1 | $ fabric-ca-client affiliation list -H `pwd`/fabric-ca-files/org1.example.com/admin |
注意与`Admin@example.com`的区别,这里只能看到组织com.example.org1
将Admin@org1.example.com的证书复制到org1.example.com
的msp/admincerts
中:
1 | mkdir fabric-ca-files/org1.example.com/msp/admincerts/ |
在`Admin@org1.example.com目录`中也需要创建msp/admincerts目录,通过peer命令操作fabric的时候会要求admincerts存在:
1 | mkdir fabric-ca-files/org1.example.com/admin/msp/admincerts/ # 注意是org1.example.com/admin目录 |
另外,这里没有使用中间CA,将intermediatecerts中的空文件删除,否则peer会提示Warning:
1 | rm fabric-ca-files/org1.example.com/admin/msp/intermediatecerts/* |
注册org2.example.com的管理员Admin@org2.example.com
为org2.example.com的管理员Admin@org2.example.com准备一个目录:
1 | cd ~/fabric-deploy |
将fabric-ca-files/admin/fabric-ca-client-config.yaml
其中的id
部分修改为:
1 | id: |
注册:
1 | fabric-ca-client register -H `pwd`/fabric-ca-files/admin --id.secret=password |
生成凭证:
1 | $ fabric-ca-client enroll -u http://Admin@org2.example.com:password@localhost:7054 -H `pwd`/fabric-ca-files/org2.example.com/admin |
查看联盟:
1 | $ fabric-ca-client affiliation list -H `pwd`/fabric-ca-files/org2.example.com/admin |
Admin@org2.example.com只能看到组织com.example.org2
。
将Admin@org2.example.com的证书复制到org2.example.com的msp/admincerts中:
1 | mkdir fabric-ca-files/org2.example.com/msp/admincerts/ |
在Admin@org2.example.com中也需要创建msp/admincerts目录,通过peer命令操作fabric的时候会要求admincerts存在:
1 | mkdir fabric-ca-files/org2.example.com/admin/msp/admincerts/ |
另外,这里没有使用中间CA,将intermediatecerts中的空文件删除,否则peer会提示Warning:
1 | rm fabric-ca-files/org2.example.com/admin/msp/intermediatecerts/* |
各个组织分别使用自己的Admin账户创建其它账号
example.com、org1.example.com、org2.example.com三个组织这时候可以分别使用自己的Admin账号创建子账号。
orderer.example.com
使用`Admin@example.com注册账号orderer.example.com。注意这时候指定的目录是fabric-ca-files/
example.com`/admin/。
修改fabric-ca-files/example.com/admin/fabric-ca-client-config.yaml:
1 | id: |
注册以及生成凭证:
1 | fabric-ca-client register -H `pwd`/fabric-ca-files/example.com/admin --id.secret=password |
将`Admin@example.com`的证书复制到fabric-ca-files/example.com/orderer/msp/admincerts:
1 | mkdir fabric-ca-files/example.com/orderer/msp/admincerts |
peer0.org1.example.com
使用`Admin@org1.example.com注册账号peer0.org1.example.com。这时候指定的目录是fabric-ca-files/
org1.example.com`/admin/。
修改fabric-ca-files/org1.example.com/admin/fabric-ca-client-config.yaml:
1 | id: |
注册以及生成凭证:
1 | fabric-ca-client register -H `pwd`/fabric-ca-files/org1.example.com/admin --id.secret=password |
将`Admin@org1.example.com`的证书复制到fabric-ca-files/org1.example.com/peer0/msp/admincerts:
1 | mkdir fabric-ca-files/org1.example.com/peer0/msp/admincerts |
peer1.org1.example.com
使用`Admin@org1.example.com注册账号peer1.org1.example.com。这时候指定的目录是fabric-ca-files/
org1.example.com`/admin/。
修改fabric-ca-files/org1.example.com/admin/fabric-ca-client-config.yaml:
1 | id: |
注册以及生成凭证:
1 | fabric-ca-client register -H `pwd`/fabric-ca-files/org1.example.com/admin --id.secret=password |
将`Admin@org1.example.com`的证书复制到fabric-ca-files/org1.example.com/peer1/msp/admincerts:
1 | mkdir fabric-ca-files/org1.example.com/peer1/msp/admincerts |
peer0.org2.example.com
使用`Admin@org2.example.com注册账号peer0.org2.example.com。这时候指定的目录是fabric-ca-files/
org2.example.com`/admin/。
修改fabric-ca-files/org2.example.com/admin/fabric-ca-client-config.yaml:
1 | id: |
注册以及生成凭证:
1 | fabric-ca-client register -H `pwd`/fabric-ca-files/org2.example.com/admin --id.secret=password |
将`Admin@org2.example.com`的证书复制到fabric-ca-files/org2.example.com/peer0/msp/admincerts:
1 | mkdir fabric-ca-files/org2.example.com/peer0/msp/admincerts |
注意:
之前发现直接这么生成的证书,会少东西,需要在每个组织的msp目录下面配置下config.yaml
1 | [root@localhost msp]# pwd |