我遵循的步骤:
1( 用 1-CA(即根 CA(、1-orderer、1-peer 和 1-couchdb 启动结构
2(我将外壳附加到根的ca上,并触发了2个命令 注册中间 CA。
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
fabric-ca-client register --id.name ica --id.attrs '"hf.Registrar.Roles=user,peer",hf.Revoker=true,hf.IntermediateCA=true' --id.secret icapw
3(我按如下方式启动了ca1容器:
services:
ca1.example.com:
image: hyperledger/fabric-ca:x86_64-1.1.0
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
- FABRIC_CA_SERVER_PORT=8054
- FABRIC_CA_SERVER_CA_NAME=ca1.example.com
ports:
- "8054:8054"
command: sh -c 'fabric-ca-server start -b admin:adminpw -u http://ica:icapw@ca.example.com:7054'
container_name: ca1.example.com
networks:
- basic
但它总是创建默认证书,所以我从容器中删除了所有证书,然后再次触发启动命令,当我尝试使用该中间 ca 注册管理员时,它给了我以下错误:
signed certificate with serial number 619423114660023963149266564884451731119475746692
ca1.example.com | 2018/09/20 06:38:53 [INFO] 127.0.0.1:47144 POST /enroll 500 0 "Certificate signing failure: Failed to insert record intodatabase: attempt to write a readonly database"
我不确定我遵循的过程。因此,请向我建议要遵循的确切步骤,如果步骤正确,则说明此错误的原因。
我已经遵循了文档:https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.htm
假设您有一个Root Fabric-CA(我们称之为RCA(服务器启动并运行。
根据我的理解,您正在尝试启动一个中间结构-CA 服务器,该服务器将连接到上面的 RCA。
我尝试的是以下内容。
version: '2'
networks: fabric-ca:
services:
ica:
container_name: ica
image: hyperledger/fabric-ca
command: /bin/bash -c '/scripts/start-intermediate-ca.sh 2>&1 | tee /data/logs/ica.log'
environment:
- FABRIC_CA_SERVER_HOME=/etc/hyperledger/fabric-ca
- FABRIC_CA_SERVER_CA_NAME=ica
- FABRIC_CA_SERVER_INTERMEDIATE_TLS_CERTFILES=/data/rca-ca-cert.pem
- FABRIC_CA_SERVER_CSR_HOSTS=ica
- FABRIC_CA_SERVER_TLS_ENABLED=true
- FABRIC_CA_SERVER_DEBUG=true
- BOOTSTRAP_USER_PASS=ica-admin:ica-adminpw
- PARENT_URL=https://rca-admin:rca-adminpw@rca:7054
- TARGET_CHAINFILE=/data/ica-ca-chain.pem
volumes:
- ./data:/data
- ./scripts:/scripts
- ./data/fabric_ca_test/ica:/etc/hyperledger/fabric-ca
networks:
- fabric-ca
ports:
- 10.10.10.101:7055:7054
请注意脚本的使用 start-intermediate-ca.sh
#!/bin/bash
#
set -e
# Initialize the intermediate CA
fabric-ca-server init -b $BOOTSTRAP_USER_PASS -u $PARENT_URL
# Copy the intermediate CA's certificate chain to the data directory to be used by others
cp $FABRIC_CA_SERVER_HOME/ca-chain.pem $TARGET_CHAINFILE
# Start the intermediate CA
fabric-ca-server start --config $FABRIC_CA_SERVER_HOME/fabric-ca-server-config.yaml
这在Hyperledger Fabric示例中的示例中也可用。 结构样本 github 存储库中的结构 CA 示例
通过它。这是一个全面的例子。
您应该能够对其进行一些调整以处理您的方案。
首先,如果您遇到这种麻烦,我强烈建议您停止并清理所有容器,运行以下 docker 命令:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
我将基于基本网络示例进行解释。
之后,您必须启动容器,start.shir 调用您startFabric.sh该脚本通常具有负责启动 docker 容器的docker-compose up
。
我不确定你的意思是使用默认证书,但如果你对这些证书有问题,你可以重新生成它们。你可能有一个generate.sh脚本,一个生成新的加密配置和genesis.block和config,这个基于两个文件configtx.yaml和crypto-config.yaml。
确保您的crytogen工具版本与您正在使用的版本相同,指向旧版本的cryptogen工具是很常见的,这会生成无法正常工作的损坏证书。
好吧,如果这些解决方案中的任何一个不起作用,也许你应该重新开始,我根据该示例(基本网络(编写了一个指南,介绍如何在多个物理主机中设置Hyperledger Fabric,也许您可以检查一下。
在多台物理机器中设置Hyperledger Fabric
。