我遵循的步骤:
1)使用1-ca(这是根ca),1-orderer,1-peer和1-couchdb启动结构
2)我将shell附加到root的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
答案 0 :(得分:3)
可以说您已经启动了Root Fabric-CA(称为RCA)服务器并正在运行。
据我了解,您正在尝试启动将连接到上述RCA的中间Fabric-CA服务器。
我尝试的是以下内容。
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示例中提供的示例中也可以使用。 Fabric CA Samples in fabric-samples github Repository
通过它。它是一个综合的例子。
您应该可以对其进行一些微调以应对您的情况。
答案 1 :(得分:0)
首先,如果遇到此类问题,我强烈建议您运行以下docker命令停止并清理所有容器:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
我将基于基本网络示例进行解释。
此后,您必须启动容器以调用 start.sh 或 startFabric.sh ,该脚本通常具有docker-compose up
负责启动docker的人员容器。
我不确定您的意思是默认证书,但是如果您对默认证书有疑问,可以重新生成它们。您可能有一个 generate.sh 脚本,该脚本可以生成新的 crypto-config 和 genesis.block 和 config ,该文件基于两个文件 configtx.yaml 和 crypto-config.yaml 。
请确保您的密码工具的版本与所使用的版本相同,并且通常指向 cryptogen工具的较旧版本 >这会生成无效的证书。
好吧,如果这些解决方案中的任何一个都不起作用,也许您应该重新开始,我写了一个基于该示例(基本网络)的指南,该指南介绍了如何在多个示例中设置Hyperledger Fabric物理主机,也许您可以检查一下。