6

我遵循的步骤:

1) 使用 1-ca(即 root 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

4

2 回答 2

3

假设您有一个 Root Fabric-CA(我们称之为 RCA)服务器启动并运行。

据我了解,您正在尝试启动一个中间 Fabric-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 示例中的示例中也可用。 Fabric-samples github 存储库中的 Fabric CA 示例

通过它。它是一个全面的例子。

您应该能够对其进行一些调整以处理您的情况。

于 2018-10-08T11:49:44.940 回答
0

首先,如果您遇到这种麻烦,我强烈建议您停止并清理所有容器,运行以下 docker 命令:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

我将基于基本网络示例进行解释。

之后,您必须启动容器,调用您start.sh或startFabric.sh该脚本通常负责启动您的dockerdocker-compose up容器。

我不确定您的意思是使用默认证书,但如果您对这些证书有疑问,您可以重新生成它们。您可能有一个generate.sh脚本,它生成新的crypto-config以及genesis.blockconfig,这个脚本基于两个文件configtx.yamlcrypto-config.yaml

确保您的crytogen 工具版本与您使用的版本相同,通常指向较旧版本的cryptogen 工具,这会生成无法使用的损坏证书。

好吧,如果这些解决方案中的任何一个都不起作用,也许您应该重新开始,我根据该示例 ( basic-network ) 编写了一份指南,介绍了如何在多个物理主机中设置 Hyperledger Fabric,也许您可​​以检查一下。

在多台物理机中设置 Hyperledger Fabric

于 2018-10-06T17:21:15.670 回答