关于fabric-ca的使用

 

root ca
ca一般按照组织来划分,即org1,org2,org3分别拥有自己的ca。
ca启动的时候,会设定两个环境变量,FABRIC_CA_SERVER_CA_CERTFILE 和 FABRIC_CA_SERVER_CA_KEYFILE。
如果不设定这两个的时候会怎么样呢?其实,如果不设定的话,CA服务器会根据默认的ca config来自己生成这两个文件。
这个时候的CA就是所谓的rootCA。
·FABRIC_CA_SERVER_CA_CERTFILE是当前ca的证明书(公钥)
·FABRIC_CA_SERVER_CA_KEYFILE是当前ca的私钥
ca的证明书(公钥)是根据fabric-ca-server-config.yaml里面csr域的内容生成请求书,然后用signing域的内容进行自认证,生成的文件。
ca的私钥是根据fabric-ca-server-config.yaml里面bccsp域的内容生成的文件。
默认的时候会生成ca-cert.pem和ca-key.pem还有msp/keystore文件,如果config配置好了,除了config和db文件,
其他的都删除,再执行下面命令,就会按照你的配置文件,生成root私钥和root证明书
fabric-ca-server init -b admin:adminpw

 

--------------------------------------------------------------------------------------------------------------------------

以下是如何利用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:[email protected]: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:[email protected]: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/[email protected]/msp/admincerts
crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore
crypto-config/peerOrganizations/org1.example.com/users/[email protected]/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

10. https://bitshuo.com/topic/5ae2c65c93163eb52a348d8a

你可能感兴趣的:(区块链)