Frabic CA 部署流程

TLS CA

提供加密通信使用的公钥证书,通常一个组织使用一个 TLS CA 根证书。

ORG CA

提供身份证明,节点证明自己属于该组织。

TLS CA

TLS CA 服务器搭建

配置:Server-side TLS

工具:fabric-ca-server

初始化

创建 TLS CA 管理员账户(Register)

  • 用户名:密码
1
2
3
4
5
6
# 创建文件夹
mkdir fabric-ca-server-tls && cd fabric-ca-server-tls

# 初始化
# -b bootstrap identity
./fabric-ca-server init -b tls-admin:tls-adminpw

以上操作实现:

  • 生成 TLS CA root signed certificate ,即自签公钥证书
    • 区块链网络中的所有组织成员节点都必须拥有该证书
  • 生成私钥并存储在 /msp/keystore 文件夹中
  • 初始化数据库(默认使用 SQLite 数据库)
  • 根据传入的用户名密码初始化 TLS CA 管理员

修改配置

配置文件:fabric-ca-server-config.yaml

至少要注意/修改的配置:

  • post:端口
  • tls-enabled:启用 TLS
    • 启动 CA 服务器后将生成自签证书 tls-cert.pem
  • ca.name:为 CA 命名,比如 TLS CA 可以叫 tls-ca,组织的 CA 可以叫 org-ca
  • csr.hosts:设置 CA 服务器运行的主机名和 IP 地址
  • signing.profiles.ca:TLS CA 不签发 CA 证书
  • operatons.listenAddress:监听地址和端口

启动 TLS CA 服务器

启动时无法设置 CA 管理员账户

1
./fabric-ca-server start

TLS CA 管理员账户登记(Enroll)

工具:fabric-ca-client

目录结构

1
2
3
fabric-ca-client
└── tls-ca # 存储登记后 TLS CA 返回的公私钥
└── tls-root-cert # 存储 TLS CA root certificate

拷贝证书

fabric-ca-server-tls/ca-cert.pem 拷贝到 fabric-ca-client/tls-root-cert/tls-ca-cert.pem

每个和 TLS CA 通讯的节点都需要包含该证书

向 TLS CA 进行登记

使用用户名密码向 TLS CA 登记 CA 管理员账户

1
./fabric-ca-client enroll -d -u https://tls-admin:tls-adminpw@my-machine.example.com:7054 --tls.certfiles tls-root-cert/tls-ca-cert.pem --enrollment.profile tls --csr.hosts 'host1,*.example.com' --mspdir tls-ca/tlsadmin/msp

参数说明:

  • -u https://tls-admin:tls-adminpw@my-machine.example.com:7054:TLS CA 服务器地址和端口
  • --tls.certfiles tls-root-cert/tls-ca-cert.pem:TLS CA 根证书位置
  • --enrollment.profile tls:向 TLS CA 登记
    • 如果在 TLS CA 服务器端的配置中移除了 signing.profiles.ca,则该指令参数是必须的
  • --csr.hosts 'host1,*.example.com':任何域名下的主机都被视为 host1
  • --mspdir tls-ca/tlsadmin/msp:存储 TLS CA 管理员的 TLS 证书的位置

Organization CA

获得 TLS 证书

为之后要创建的 ORG CA 管理员用户进行注册(register)

1
./fabric-ca-client register -d --id.name rcaadmin --id.secret rcaadminpw -u https://my-machine.example.com:7054  --tls.certfiles tls-root-cert/tls-ca-cert.pem --mspdir tls-ca/tlsadmin/msp

参数说明:

  • --id.name rcaadmin --id.secret rcaadminpw:用户名、密码
  • --mspdir tls-ca/tlsadmin/msp:指向 TLS CA 管理员证书

为之后要创建的 ORG CA 管理员用户进行登记(enroll)

1
./fabric-ca-client enroll -d -u https://rcaadmin:rcaadminpw@my-machine.example.com:7054 --tls.certfiles tls-root-cert/tls-ca-cert.pem --enrollment.profile tls --csr.hosts 'host1,*.example.com' --mspdir tls-ca/rcaadmin/msp

参数说明:

  • --mspdir tls-ca/rcaadmin/msp:存储 rcaadmmin 的 TLS 证书 的位置

部署 Organization CA

作为 enrollment CA / eCert CA / root CA

工具:fabric-ca-server

准备工作

  • 向 TLS CA 注册并登记,即 rcaadmin
  • 拷贝之前生成的密钥对及 TLS 证书
    • 私钥重命名为 key.pem
1
2
3
4
5
6
7
8
9
# 创建文件夹
mkdir fabric-ca-server-org1
cd fabric-ca-server-org1

# 创建文件夹
mkdir tls

# 拷贝 TLS 公私钥对
cp ../fabric-ca-client/tls-ca/rcaadmin/msp/signcerts/cert.pem tls && cp ../fabric-ca-client/tls-ca/rcaadmin/msp/keystore/key.pem tls

初始化

创建 CA 管理员用户

1
./fabric-ca-server init -b rcaadmin:rcaadminpw

按需修改生成的配置文件 fabric-ca-server-config.yaml

启动 CA 服务器

1
./fabric-ca-server start

CA 管理员账户登记(Enroll)

rcaadmin 已经向 TLS 进行注册与登记,但是仅向 Organization CA 进行注册(初始化阶段),因此还需要向 CA 进行登记

工具:fabric-ca-client

目录结构

1
2
3
fabric-ca-client
└── org1-ca # 存储登记后 CA 返回的公私钥
└── tls-root-cert # 存储 TLS CA root certificate

向 CA 进行登记

使用用户名密码向 CA 登记 CA 管理员账户

1
./fabric-ca-client enroll -d -u https://rcaadmin:rcaadminpw@my-machine.example.com:7055 --tls.certfiles tls-root-cert/tls-ca-cert.pem --csr.hosts 'host1,*.example.com' --mspdir org1-ca/rcaadmin/msp

以上操作生成文件夹 fabric-ca-client/org1-ca/rcaadmin/msp

1
2
3
4
5
6
7
8
9
10
└── msp
├── cacerts
└── my-machine-example-com-7055.pem # Organization CA root certificate
├── keystore
└── 60b6a16b8b5ba3fc3113c522cce86a724d7eb92d6c3961cfd9afbd27bf11c37f_sk # CA 管理员身份私钥,可重命名为 org1-key.pem
├── signcerts
└── cert.pem # CA 管理员身份签名证书(公钥)
├── user
├── IssuerPublicKey
└── IssuerRevocationPublicKey

参阅