--------------------------------------------------------------------------------------------------------------------------
以下是如何利用ca生成的密钥和证书的例子(从初始状态开始)
1.ca服务器启动,还是按照默认的方式,即(FABRIC_CA_SERVER_CA_CERTFILE 、FABRIC_CA_SERVER_CA_KEYFILE)利用peer下面ca/msp的文件
2.ca-cli启动,注册admin用户
fabric-ca-client enroll -u http://admin:adminpw@ca.org1.example.com:7054 -M admin/msp
3.用admin用户注册peer0
fabric-ca-client register -M admin/msp --id.name peer0 --id.type peer --id.affiliation org1 --id.secret peer0pw -u http://ca.org1.example.com:7054
fabric-ca-client enroll -u http://peer0:peer0pw@ca.org1.example.com:7054 -M peer0/msp
4.替换generateArtifacts.sh生成的默认文件
其实,ca-client里面生成的文件就3种
admin/msp/cacerts/ca-org1-example-com-7054.pem
admin/msp/keystore/xxxx_sk
admin/msp/signcerts/cert.pem
而ca-org1-example-com-7054.pem,是ca服务器启动时候设置的FABRIC_CA_SERVER_CA_CERTFILE
这样一来只需要把另外两个替换相应的文件夹下的内容就可以了
替换admin的内容
crypto-config/peerOrganizations/org1.example.com/msp/admincerts
crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts
crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts
crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts
crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore
crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts
替换peer0的内容
crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore
crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts
5.做创世初块
6.启动所有结点
7.执行e2e例子
一切OK没有问题
####发现的问题####
1 当主机,ca容器,sqlite三者时间都同步的时候,做创世初块时,出现下面错误
CRIT 002 Setting up the MSP manager failed, err The supplied identity is not valid, Verify() returned x509: certificate has expired or is not yet valid
原因是由于ca容器启动后,签发的证书,比cryptogen生成证书的时间早几分钟。暂时解决办法,让CA服务器启动5分钟后,再进行admin的enroll
2 执行e2e例子时,出现下面错误
ERRO 001 Error trying to connect to local peer: x509: certificate signed by unknown authority (possibly because of "x509: ECDSA verification failure" while trying to verify candidate authority certificate "tlsca.org1.example.com")
原因是没有把上一次执行后的容器删除。。。。
--------------------------------------------------------------------------------------------------------------------------
其他
1,强烈建议不要cryptogen和ca交叉使用,从一开始就要用ca把所有key和证明书做好。
因为,用admin来发peer的证书,要替换peer的你得先替换admin的,那样好麻烦。
2,fabric-ca-server-config.yaml用来定义ca服务器自己的私钥和证明书
fabric-ca-client-config.yaml用来定义在ca-cli端执行register和enroll时需要的参数,比如请求书csr的cn.
3.ca服务器应该按照组织来划分.
4.hf.Registrar.Roles里面的值可以任意定义
5.如果又进行enroll的时候,把新的证书放到相应路径后,要重新启动所有的peer节点,记住是所有,也就是说同一个channel内部的所有peer节点,
否则会出现gossip通信异常。重新启动不是restart,是要先stop,然后再start.
6.关于tlsca的使用,当用openssl生成tls文件的时候,需要签名,这个时候就可以使用tlsca.
tlsca的生成可以通过ca服务器,也可以openssl,用openssl的时候,就是个自签名的证书。
另外还有个说法,tls文件夹是给服务器端使用的,tlsca是给cli客户端使用的。
7.当ca使用tls的时候,需要这样做。
①ca服务器启动前,对ca服务器配置文件,做如下配置
---------------------------------------
tls:
enabled: true
certfile: ca服务器的证明书
keyfile: ca服务器的私钥
clientauth:
type: noclientcert
certfiles:
ca:
name:
keyfile: ca服务器的私钥
certfile: ca服务器的证明书
chainfile:
---------------------------------------
➁ca服务器启动
③把ca服务器生成的CA root证明书复制到ca 客户端能访问的位置
④ca客户端启动,启动参数里面FABRIC_CA_CLIENT_TLS_CERTFILES=CA root证明书,其他不用配置
⑤fabric-ca-client regrister enroll
※重要的地方是noclientcert,如果设定其它值,就需要借助其他工具生成tls文件,然后配置给ca客户端
8.fabric-samples/balance-transfer/config.json
定义的admins是org的admin,用来注册jim用户,这个admin和ca config里面定义的registry.identities的admin必须一致。
另外在ca服务器启动的时候,需要一个引导用户,那个用户是ca的管理用户,和registry.identities里面的admin没有关系。
9.自定义ca服务器的tls设定true的时候,balance-transfer在注册jim的时候,会出错。
对策是,ca服务器启动的时候,会设定下面这四个值,前两个不用特殊设定,使用ca服务器的配置文件,
自动生成根证书和私钥,后两个利用cryptogen生成的文件作为tls文件使用。
・FABRIC_CA_SERVER_CA_CERTFILE
・FABRIC_CA_SERVER_CA_KEYFILE
・FABRIC_CA_SERVER_TLS_CERTFILE
・FABRIC_CA_SERVER_TLS_KEYFILE