第二季 第二章 FISCO BCOS 使用第三方CA证书进行底层节点部署

发布于 2020-07-14 15:57:57

背景

在常规的区块链底层搭建业务开发中,大部分是使用自建CA的模式。但是,针对一些存证司法领域的区块链服务,往往需要第三方CA公司提供相关服务,主要是提供电子认证许可证书,作为可靠的第三方验证和司法认可。

在司法领域的区块链建设中,通常需要具备如下要素:第三方公正机构节点、可信时间戳、电子签名、可信用户身份授权、全流程存取证的清洁性、全流程可复现性、以及日志留存等等,缺一不可。所以必要的第三方CA对接是势在必行,详细描述可参考相关司法案例判决,见案例:四川省成都市中级人民法院 宣判网络存证合法性

改造要点

FISCO BCOS的底层CA通常是三级模式,从链证书-->机构证书-->节点证书,这样一个流程,但是现实环境中CA方虽然可以提供三级签发的证书,但是从合规性角度上是不被认可的,所以目前较为成熟的做法是 剔除机构证书,从链证书-->节点证书的签发,其中链证书由CA方提供的CA.crt,配合白名单机制使用完成基础底层节点部署。

操作实录

环境准备:

(1)两台测试服务器:118.25.208.8、132.232.115.126
(2)操作系统为ubuntu:18.04
(3)openssl 工具使用ubuntu 18.04自带 openssl 1.1.1
(4)选用普通版FISCO BCOS 2.5.0 版本,节点使用的节点证书算法为EC secp256k1曲线
(5)结合[白名单机制]进行使用(https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/certificate_list.html#id2)一起使用

备注:测试过程中节点私钥和请求证书文件统一管理,但在生产环境中节点私钥应该由各种机构管理员进行生成,提交给CA方,私钥各自留存。

  1. 基础证书准备

生成基础节点私钥和节点证书请求文件
采用openssl 工具,要求1.0.2版本以上,生成对应的节点私钥和节点证书请求文件、以及对应的node.nodeid(nodeid 是公钥的十六进制表示)。

说明:以下每个节点第四步生成node.nodeid 中的node.key ,都是对应节点的cert_IP_port.key 修改的,该操作是底层要求的。

生产节点1 node_118.25.208.8_30300 相关文件

(1)生成cert_118.25.208.8_30300.param:openssl ecparam -out   cert_118.25.208.8_30300.param -name secp256k1
(2)生成cert_118.25.208.8_30300.key:openssl genpkey -paramfile cert_118.25.208.8_30300.param -out  cert_118.25.208.8_30300.key 2> /dev/null
(3)生成cert_118.25.208.8_30300.csr:openssl req -new -sha256 -subj "/CN=fj/O=Hashchain/OU=Hash" -key  cert_118.25.208.8_30300.key  -out  cert_118.25.208.8_30300.csr
(4)生成对应的node.nodeid:openssl ec -in node.key -text -noout 2> /dev/null | sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}' | cat >node.nodeid

生产节点2 node_118.25.208.8_30301 相关文件

(1)生成cert_118.25.208.8_30301.param:openssl ecparam -out   cert_118.25.208.8_30301.param -name secp256k1
(2)生成cert_118.25.208.8_30301.key:openssl genpkey -paramfile cert_118.25.208.8_30301.param -out  cert_118.25.208.8_30301.key 2> /dev/null
(3)生成cert_118.25.208.8_30301.csr:openssl req -new -sha256 -subj "/CN=fj/O=Hashchain/OU=fc" -key  cert_118.25.208.8_30301.key  -out  cert_118.25.208.8_30301.csr
(4)生成对应的node.nodeid:openssl ec -in node.key -text -noout 2> /dev/null | sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}' | cat >node.nodeid

生产节点3 node_132.232.115.126_30300 相关文件

(1)生成cert_132.232.115.126_30300.param:openssl ecparam -out    cert_132.232.115.126_30300.param -name secp256k1
(2)生成cert_132.232.115.126_30300.key:openssl genpkey -paramfile  cert_132.232.115.126_30300.param -out  cert_132.232.115.126_30300.key 2> /dev/null
(3)生成cert_132.232.115.126_30300.csr:openssl req -new -sha256 -subj "/CN=fj/O=Hashchain/OU=gz" -key  cert_132.232.115.126_30300.key  -out  cert_132.232.115.126_30300.csr
(4)生成对应的node.nodeid:openssl ec -in node.key -text -noout 2> /dev/null | sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}' | cat >node.nodeid

生产节点4 node_132.232.115.126_30301 相关文件

(1)生成cert_132.232.115.126_30301.param:openssl ecparam -out   cert_132.232.115.126_30301.param -name secp256k1
(2)生成cert_132.232.115.126_30301.key:openssl genpkey -paramfile cert_132.232.115.126_30301.param -out  cert_132.232.115.126_30301.key 2> /dev/null
(3)生成cert_132.232.115.126_30301.csr:openssl req -new -sha256 -subj "/CN=fj/O=Hashchain/OU=ts" -key  cert_132.232.115.126_30301.key  -out  cert_132.232.115.126_30301.csr
(4)生成对应的node.nodeid:openssl ec -in node.key -text -noout 2> /dev/null | sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}' | cat >node.nodeid
说明:FISCOBCOS 最新2.5版本,都是用私钥都是采用EC secp 256k1曲线算法, 以前对应一级二级私钥文件用的rsa算法生成,三级私钥文件才是使用256k1算法生成。

如图为私钥样式:
image.png

2.CA方进行节点证书签发

提交各个节点的node.csr 文件给CA方,返回一张CA.crt 证书作为链证书、返回pem格式的四张节点证书。详细如图
image.png
image.png

其中节点证书样式如图
image.png

说明:正常的CA方返回证书结构是:root -> issuer ->node,但在FISCO BCOS中需要改为这样的模式: root -> node -issuer,节点证书中糅合issuer证书内容。

3.建链

使用国内镜像下载相关程序。

(1)下载 国内镜像

cd ~/ && git clone https://gitee.com/FISCO-BCOS/generator.git

(2)安装

cd ~/generator && bash ./scripts/install.sh

(3)检查是否安装成功,若成功,输出 usage: generator xxx

./generator -h

(4)获取节点二进制

拉取最新fisco-bcos二进制文件到meta中(国内cdn)

./generator --download_fisco ./meta --cdn

(5)检查二进制版本
若成功,输出 FISCO-BCOS Version : x.x.x-x

./meta/fisco-bcos -v

(6) 机构分配
选用 118.25.208.8 所属机构 作为机构A,并由机构A负责创世区块生成。
选用 132.232.115.126 所属机构 作为机构B。

(7)将CA方提供CA.crt 证书作为链证书
在机构A所属目录手动创建dir_chain_ca目录,并将CA.crt 放到dir_chain_ca目录中。
image.png

(8)在机构A和机构B的meta目录下进行节点证书迁移

在meta目录中,手动创建对应的节点目录,其中机构A为:node_118.25.208.8_30300、node_118.25.208.8_30301,机构B为:node_132.232.115.126_30300、node_132.232.115.126_30301。

每个目录需要存放对应的节点证书和节点私钥、节点Id,将CA方生成的节点证书、以及最初准备的节点id、节点私钥等文件统一分发至对应的节点目录,详细如图:
image.png

(9)机构A收集所有节点证书

在机构A的meta目录下,收集对应的节点证书,用于后续生成创世区块。如图所示:
image.png

(10)手动配置 机构A修改conf文件夹下的group_genesis.ini,生成创世区块
image.png
执行命令:

./generator --create_group_genesis ./group
生成的group.1.genesis即为群组创世区块,分发群组1创世区块、CA链证书至机构B的meta目录下
如图所示:
image.png

(11)修改机构A、机构B的conf目录下的node_deployment.ini
其中p2p 地址为外网地址、rpc、channel 地址为内网地址。
image.png

(12)在机构meta目录下手动创建peers.txt 文件
机构A中创建 peers.txt、peersB.txt,机构B 创建 peers.txt、peersA.txt
其中以机构A为例,peers.txt 内容如下:

118.25.208.8:30300
118.25.208.8:30301
peersB.txt 内容如下:
132.232.115.126:30300
132.232.115.126:30301

(13)机构A和机构B中生成节点
在机构A的generator中执行命令,生成机构A的对应节点

./generator --build_install_package ./meta/peersB.txt ./nodeA

如图所示,是生成的nodeA目录
image.png

在机构B的generator中执行命令,生成机构B的对应节点

./generator --build_install_package ./meta/peersA.txt ./nodeB

image.png

(14)运行两个机构的节点

bash ./nodeA/start_all.sh
bash ./nodeB/start_all.sh

查看节点进程:

ps -ef | grep fisco

如图所示:

机构A对应节点进程:
image.png
机构B对应的节点进程:
image.png

查看节点 log 共识信息

tail -f ./node*/node*/log/log* | grep +++

如图所示,共识状态正常
image.png

(15)在机构A和机构B 分别搭建控制台
具体操作:略

说明:控制台conf目录下的sdk.crt和sdk.key 可以使用对应的node.crt、node.key进行重命名,也可以重新生成由CA方进行签发

(16)控制台部署并进行合约部署测试
image.png
针对机构A和机构B对应的控制台操作结果进行比对,两者数据一致,确保共识正常。

(17)配置白名单

在对应节点的config.ini 配置白名单
image.png

在各节点scripts目录下找到 reload_whitelist.sh文件执行,进行配置刷新

bash reload_whitelist.sh

image.png

结尾
至此,完成第三方CA证书结合底层节点部署的改造。从流程上看整个过程和官方提供的运维部署工具流程差不多,主要是在链证书-->机构证书-->节点证书的生成改变了,以及需要在meta目录下进行手动创建peers.txt文件和节点目录等。

0 条评论

发布
问题