学习记录:fabric-ca(3)-operations guide再次操作

前情提要

之前看教程发现很多地方并不是为了最终的流程,而是为了解释为什么这么做,也有很多不理解导致操作的不好的地方。这里我重新弄一下。

目标

还是一个TLS CA,2个组织各2个节点,1个orderer节点。总共是11个镜像:

  • tls-ca
  • org0-ca
  • org1-ca
  • org2-ca
  • peer1-org1
  • peer2-org1
  • peer1-org2
  • peer2-org2
  • orderer1-org0
  • cli-org1
  • cli-org2

(请善用CSDN自带的markdown目录功能)

开始搭建

空项目,testop,创建docker-compose.yml

准备4个CA

这4个在当前例子中的逻辑是并行的,互不影响,所以可以直接启动4个容器。我这里对文件夹结构做了一些调整
在这里插入图片描述
先忽略org1,org2,截图晚了。剩下的是4个ca文件夹。分别对因4个容器,这样做是想完全把每个容器隔离开,不要像教程中那样映射,有点乱(重复带来整齐划一的整洁)。
对应容器yml如下

version: "3"
networks:
    fabric-ca: # 自定义一个网络
services:
    # 7052
    tls-ca:
        image: hyperledger/fabric-ca:amd64-1.4.9 
        container_name: tls-ca
        networks: # 然后在这里指定加入网络
            - fabric-ca
        ports:
            - 7052:7052 # 监听7052
        environment:
            - FABRIC_CA_SERVER_CSR_CN= tls-ca # 这设置的是服务器的名称
            - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0 # 这设置的是主机位置
            - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto #服务器根目录
            - FABRIC_CA_SERVER_TLS_ENABLED=true # 启用TLS通信,这样以来必须提供TLS证书的路径才能正常操作
            - FABRIC_CA_SERVER_DEBUG=true # 启用debug,输出debug信息
            - FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/fabric-ca/admin # 这里默认调整为admin 目录,这样不用每次进去export,也就是进去就是管理员权限的client
            - FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/fabric-ca/crypto/ca-cert.pem # 当然TLS证书也直接设置为本C服务器的路径,省去拷贝,直接操作
        volumes:
            - ./tls-ca:/tmp/hyperledger/fabric-ca
        command: sh -c 'fabric-ca-server start -d -b tls-ca-admin:tls-ca-adminpw --port 7052'  # 命令还是启动一个CA服务器,端口换成7052,-d代表输出debug信息
    # 7053
    org0-ca:
        image: hyperledger/fabric-ca:amd64-1.4.9 
        container_name: org0-ca
        networks:
            - fabric-ca
        ports:
            - 7053:7053
        environment:
            - FABRIC_CA_SERVER_CSR_CN=org0-ca
            - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
            - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
            - FABRIC_CA_SERVER_TLS_ENABLED=true
            - FABRIC_CA_SERVER_DEBUG=true
            - FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/fabric-ca/admin 
            - FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/fabric-ca/crypto/ca-cert.pem 
        volumes:
            - ./org0-ca:/tmp/hyperledger/fabric-ca
        command: /bin/bash -c 'fabric-ca-server start -d -b org0-ca-admin:org0-ca-adminpw --port 7053'
    # 7054
    org1-ca:
        image: hyperledger/fabric-ca:amd64-1.4.9 
        container_name: org1-ca
        networks:
            - fabric-ca
        ports:
            - 7054:7054
        environment:
            - FABRIC_CA_SERVER_CSR_CN=org1-ca
            - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
            - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
            - FABRIC_CA_SERVER_TLS_ENABLED=true
            - FABRIC_CA_SERVER_DEBUG=true
            - FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/fabric-ca/admin 
            - FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/fabric-ca/crypto/ca-cert.pem 
        volumes:
            - ./org1-ca:/tmp/hyperledger/fabric-ca
        command: /bin/bash -c 'fabric-ca-server start -d -b org1-ca-admin:org1-ca-adminpw'
    # 7055
    org2-ca:
        image: hyperledger/fabric-ca:amd64-1.4.9 
        container_name: org2-ca
        networks:
            - fabric-ca
        ports:
            - 7055:7055
        environment:
            - FABRIC_CA_SERVER_CSR_CN=org2-ca
            - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
            - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
            - FABRIC_CA_SERVER_TLS_ENABLED=true
            - FABRIC_CA_SERVER_DEBUG=true
            - FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/fabric-ca/admin 
            - FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/fabric-ca/crypto/ca-cert.pem 
        volumes:
            - ./org2-ca:/tmp/hyperledger/fabric-ca
        command: /bin/bash -c 'fabric-ca-server start -d -b org2-ca-admin:org2-ca-adminpw --port 7055'

然后对4个节点分别进行身份注册,就是用下面的命令从宿主机进入,然后进行容器内操作:

docker exec -it <容器名> bash 

tls-ca

fabric-ca-client enroll -d -u https://tls-ca-admin:tls-ca-adminpw@0.0.0.0:7052
fabric-ca-client register -d --id.name peer1-org1 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer2-org1 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer1-org2 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer2-org2 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name orderer1-org0 --id.secret ordererPW --id.type orderer -u https://0.0.0.0:7052

orderer-ca

fabric-ca-client enroll -d -u https://org0-ca-admin:org0-ca-adminpw@0.0.0.0:7053
fabric-ca-client register -d --id.name orderer1-org0 --id.secret ordererpw --id.type orderer -u https://0.0.0.0:7053
fabric-ca-client register -d --id.name admin-org0 --id.secret org0adminpw --id.type admin --id.attrs "hf.Registrar.Roles=client,hf.Registrar.Attributes=*,hf.Revoker=true,hf.GenCRL=true,admin=true:ecert,abac.init=true:ecert" -u https://0.0.0.0:7053

注意: 我把一些用户名和密码改了。

org1的ca

fabric-ca-client enroll -d -u https://org1-ca-admin:org1-ca-adminpw@0.0.0.0:7054
fabric-ca-client register -d --id.name peer1-org1 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7054
fabric-ca-client register -d --id.name peer2-org1 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7054
fabric-ca-client register -d --id.name admin-org1 --id.secret org1AdminPW --id.type admin --id.attrs "hf.Registrar.Roles=client,hf.Registrar.Attributes=*,hf.Revoker=true,hf.GenCRL=true,admin=true:ecert,abac.init=true:ecert" -u https://0.0.0.0:7054 # 这里请注意,我之前没加上,导致名字是admin,但是没有admin的权限
fabric-ca-client register -d --id.name user-org1 --id.secret org1UserPW --id.type user -u https://0.0.0.0:7054

org2的ca

fabric-ca-client enroll -d -u https://org2-ca-admin:org2-ca-adminpw@0.0.0.0:7055
fabric-ca-client register -d --id.name peer1-org2 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7055
fabric-ca-client register -d --id.name peer2-org2 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7055
fabric-ca-client register -d --id.name admin-org2 --id.secret org2AdminPW --id.type admin --id.attrs "hf.Registrar.Roles=client,hf.Registrar.Attributes=*,hf.Revoker=true,hf.GenCRL=true,admin=true:ecert,abac.init=true:ecert" -u https://0.0.0.0:7055 # 这里请注意,我之前没加上,导致名字是admin,但是没有admin的权限
fabric-ca-client register -d --id.name user-org2 --id.secret org2UserPW --id.type user -u https://0.0.0.0:7055

准备4个普通节点

这次从宿主机(我的电脑)启动命令行,进入root权限,如下(就是先设置root密码,再输入su,输入密码,得到下图,然后cd到项目目录),然后把本机的fabric-ca-client路径添加到PATH变量(我的是在.bashrc里添加的,所以切换到root没了)
在这里插入图片描述
在这里插入图片描述

Local peer MSP

创建相应节点的文件夹,直接创建到assets,用来存放各CA服务器的材料
在这里插入图片描述然后拷贝相应文件过来,这一步相当于从各个CA服务器拷贝东西到节点主机里(我这里只贴了一条,自己做一下,4个节点,一共4次,别弄错了名字)

在这里插入图片描述然后可以在root窗口下,为几个节点颁发凭证。
peer1-org1

export FABRIC_CA_CLIENT_HOME=./org1/peer1
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/ca/org1-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp # 会在FABRIC_CA_CLIENT_HOME下创建msp文件夹
fabric-ca-client enroll -d -u https://peer1-org1:peer1PW@0.0.0.0:7054

peer2-org1

export FABRIC_CA_CLIENT_HOME=./org1/peer2
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/ca/org1-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp # 会在FABRIC_CA_CLIENT_HOME下创建msp文件夹
fabric-ca-client enroll -d -u https://peer2-org1:peer2PW@0.0.0.0:7054

peer1-org2

export FABRIC_CA_CLIENT_HOME=./org2/peer1
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/ca/org2-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp # 会在FABRIC_CA_CLIENT_HOME下创建msp文件夹
fabric-ca-client enroll -d -u https://peer1-org2:peer1PW@0.0.0.0:7055

peer2-org2

export FABRIC_CA_CLIENT_HOME=./org2/peer2
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/ca/org2-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp # 会在FABRIC_CA_CLIENT_HOME下创建msp文件夹
fabric-ca-client enroll -d -u https://peer2-org2:peer2PW@0.0.0.0:7055

注意: 一定要看到输出信息是成功。也可以在启动的docker输出上看服务器的日志,要全都成功才行。

在这里插入图片描述
很快生成了4个节点的身份材料。

TLS CA MSP

创建文件夹tls-ca
在这里插入图片描述
拷贝tls的CA证书(同一个TLS CA,复制还是挺容易的,路径很简单)
在这里插入图片描述
为4个节点颁发TLS CA的凭证
peer1-org1

export FABRIC_CA_CLIENT_HOME=./org1/peer1
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/tls-ca/tls-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=tls-msp # 会在FABRIC_CA_CLIENT_HOME下创建tls-msp文件夹
fabric-ca-client enroll -d -u https://peer1-org1:peer1PW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts peer1-org1

peer2-org1

export FABRIC_CA_CLIENT_HOME=./org1/peer2
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/tls-ca/tls-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=tls-msp # 会在FABRIC_CA_CLIENT_HOME下创建tls-msp文件夹
fabric-ca-client enroll -d -u https://peer2-org1:peer2PW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts peer2-org1

peer1-org2

export FABRIC_CA_CLIENT_HOME=./org2/peer1
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/tls-ca/tls-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=tls-msp # 会在FABRIC_CA_CLIENT_HOME下创建tls-msp文件夹
fabric-ca-client enroll -d -u https://peer1-org2:peer1PW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts peer1-org2

peer2-org2

export FABRIC_CA_CLIENT_HOME=./org2/peer2
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/tls-ca/tls-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=tls-msp # 会在FABRIC_CA_CLIENT_HOME下创建tls-msp文件夹
fabric-ca-client enroll -d -u https://peer2-org2:peer2PW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts peer2-org2

改名,把tls-msp/keystore下的私钥改成key.pem。4次操作

Orgx Admin MSP

各组织管理员的颁发,主要是需要那个证书交给节点
org1的

export FABRIC_CA_CLIENT_HOME=./org1/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=../peer1/assets/ca/org1-ca-cert.pem # 这里使用peer1下复制来的ORG1 CA 证书
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://admin-org1:org1AdminPW@0.0.0.0:7054
mkdir ./org1/peer1/msp/admincerts
cp ./org1/admin/msp/signcerts/cert.pem ./org1/peer1/msp/admincerts/org1-admin-cert.pem
mkdir ./org1/peer2/msp/admincerts
cp ./org1/admin/msp/signcerts/cert.pem ./org1/peer2/msp/admincerts/org1-admin-cert.pem

org2的

export FABRIC_CA_CLIENT_HOME=./org2/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=../peer1/assets/ca/org2-ca-cert.pem # 这里使用peer1下复制来的ORG2 CA 证书
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://admin-org2:org2AdminPW@0.0.0.0:7055
mkdir ./org2/peer1/msp/admincerts
cp ./org2/admin/msp/signcerts/cert.pem ./org2/peer1/msp/admincerts/org2-admin-cert.pem
mkdir ./org2/peer2/msp/admincerts
cp ./org2/admin/msp/signcerts/cert.pem ./org2/peer2/msp/admincerts/org2-admin-cert.pem

搞定,现在每一个节点都有了相应的材料,通过assets/ca中的证书产生了Local Peer MSP(msp文件夹),通过assets/tls-ca中的证书产生了TLS CA MSP(tls-msp文件夹),并且将组织的管理员的证书拷贝到了msp/admincerts中。

现在启动节点。
启动之后,先看一下是否启动成功,再搜索一下这句话(有可能搜不到,日志刷的太快):
serve -> INFO 020 Started peer with ID=[name:“peer1-org1” ], network ID=[dev], address=[peer1-org1:7051]

docker ps -a # 看看有没有正常启动吧

准备1个排序节点

Local Orderer MSP

创建文件夹,拷贝
在这里插入图片描述还是,这一步相当于从Orderer组织的CA服务器拷贝了证书到orderer节点主机上。

export FABRIC_CA_CLIENT_HOME=./org0/orderer
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/ca/org1-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp # 会在FABRIC_CA_CLIENT_HOME下创建msp文件夹
fabric-ca-client enroll -d -u https://peer1-org1:peer1PW@0.0.0.0:7054

TLS CA MSP

创建文件夹,拷贝
在这里插入图片描述继续,从TLS CA给orderer发凭证

export FABRIC_CA_CLIENT_HOME=./org0/orderer
export FABRIC_CA_CLIENT_TLS_CERTFILES=./assets/tls-ca/tls-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=tls-msp # 会在FABRIC_CA_CLIENT_HOME下创建tls-msp文件夹
fabric-ca-client enroll -d -u https://orderer1-org0:ordererPW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts orderer1-org0

改名,把tls-msp/keystore下的私钥改成key.pem。

Org0 Admin MSP

管理员的证书,生成,然后拷贝过去

export FABRIC_CA_CLIENT_HOME=./org0/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=../orderer/assets/ca/org0-ca-cert.pem # 这里使用orderer下复制来的ORG0 CA证书
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://admin-org0:org0adminpw@0.0.0.0:7053
mkdir ./org0/orderer/msp/admincerts
cp ./org0/admin/msp/signcerts/cert.pem ./org0/orderer/msp/admincerts/org0-admin-cert.pem

创建创世区块和通道事务

得有这个才能启动排序节点。
收集所有组织的MSP。
按照结构收集3个org的证书,
./org0/orderer/orgs/org0/msp
├── admincerts
│ └── admin-org0-cert.pem
├── cacerts
│ └── org0-ca-cert.pem
├── tlscacerts
│ └── tls-ca-cert.pem
└── users

拷贝上一篇的configtx.yaml,放到./org0/orderer
运行如下

export FABRIC_CFG_PATH=./org0/orderer
configtxgen -profile OrgsOrdererGenesis -outputBlock ./org0/orderer/genesis.block -channelID syschannel
configtxgen -profile OrgsChannel -outputCreateChannelTx ./org0/orderer/channel.tx -channelID mychannel

得到结果
在这里插入图片描述
启动节点。

命令行容器

很简单,按照放在各自peer1上,直接启动就行

创建通道并加入

拷贝在orderer上生成的channel.tx到org1 peer1和org2 peer1的assets文件夹

在这里插入图片描述

进入cli

docker exec -it cli-org1 sh

还是不行,通道无法创建,提示某个地方缺失了policy,因为对配置文件不熟,现在还不知道哪里缺失了。

TODO 暂时放下,先去弄一下fabric本身,回头要部署了再来看。可能是configtx.yaml的问题,生成的通道有问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值