在first-network例子中,msp的初始化是依赖工具生成,而fabric-ca是专门启动CA节点的。这部分的代码基本落实是这样的:
功能:启动ROOT CA节点
镜像: hyperledger/fabric-ca
执行脚本: start-root-ca.sh
start-root-ca.sh 脚本主要做如下一些工作
fabric-ca-server init -b $BOOTSTRAP_USER_PASS
sed -i "/affiliations:/a \\ $aff" \
$FABRIC_CA_SERVER_HOME/fabric-ca-server-config.yaml
fabric-ca-server start
功能:启动中间证书节点
镜像: hyperledger/fabric-ca
执行脚本: start-intermediate-ca.sh
start-intermediate-ca.sh 脚本主要做如下一些工作
waitPort "root CA to start" 60 $ROOT_CA_LOGFILE $ROOT_CA_HOST 7054
fabric-ca-server init -b $BOOTSTRAP_USER_PASS -u $PARENT_URL
功能:注册order、peer节点的ID,以及创建创世区块等通道资源,在这个例子中请求注册获取ID是通过中间证书CA服务器
镜像: hyperledger/fabric-ca-tools
执行脚本: setup-fabric.sh 参考笔记《11.fabric-sample fabric-ca — setup-fabric.sh》
功能:启动排序节点
镜像: hyperledger/fabric-ca-orderer
执行脚本: start-orderer.sh
start-orderer.sh 主要的工作如下:
fabric-ca-client enroll -d --enrollment.profile tls -u $ENROLLMENT_URL -M /tmp/tls --csr.hosts $ORDERER_HOST
fabric-ca-client enroll -d -u $ENROLLMENT_URL -M $ORDERER_GENERAL_LOCALMSPDIR
finishMSPSetup $ORDERER_GENERAL_LOCALMSPDIR
copyAdminCert $ORDERER_GENERAL_LOCALMSPDIR
功能:启动记账节点
镜像: hyperledger/fabric-ca-peer
执行脚本: start-peer.sh
start-peer.sh 主要工作如下:
fabric-ca-client enroll -d --enrollment.profile tls -u
$ENROLLMENT_URL -M /tmp/tls --csr.hosts $PEER_HOST
# Generate client TLS cert and key pair for the peer
genClientTLSCert $PEER_NAME $CORE_PEER_TLS_CLIENTCERT_FILE $CORE_PEER_TLS_CLIENTKEY_FILE
# Generate client TLS cert and key pair for the peer CLI
genClientTLSCert $PEER_NAME /$DATA/tls/$PEER_NAME-cli-client.crt /$DATA/tls/$PEER_NAME-cli-client.key
功能:运行之前创建的fabric网络
镜像: hyperledger/fabric-ca-tools
执行脚本: run-fabric.sh,这部分和first-network比较类似,主要关注如下这个场景。
前置条件:在setup-fabric.sh 的registerPeerIdentities函数执行步骤中该用户信息被注册。
fabric-ca-client register -d --id.name $USER_NAME --id.secret $USER_PASS
abric-ca-client revoke -d --revoke.name $USER_NAME --gencrl
备注:这部分是在admin权限下执行的
fabric-ca-client enroll -d -u https://$USER_NAME:$USER_PASS@$CA_HOST:7054
备注:相当于将当前的环境变量做了修改,在正式的生产环境下,这台服务器上应该是不会存在admin账户的。
function queryAsRevokedUser {
set +e
logr "Querying the chaincode in the channel '$CHANNEL_NAME' on the peer '$PEER_HOST' as revoked user '$USER_NAME' ..."
local starttime=$(date +%s)
# Continue to poll until we get an expected response or reach QUERY_TIMEOUT
while test "$(($(date +%s)-starttime))" -lt "$QUERY_TIMEOUT"; do
sleep 1
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >& log.txt
if [ $? -ne 0 ]; then
err=$(cat log.txt | grep "access denied")
if [ "$err" != "" ]; then
logr "Expected error occurred when the revoked user '$USER_NAME' queried the chaincode in the channel '$CHANNEL_NAME'"
set -e
return 0
fi
fi
echo -n "."
done
set -e
cat log.txt
cat log.txt >> $RUN_SUMFILE
return 1
}