证书生成

FISCO BCOS网络采用面向CA的准入机制,国密版FISCO BCOS要生成三级证书,包括:链证书,机构证书和节点证书。

生成链证书

FISCO BCOS提供generate_chain_cert.sh脚本生成链证书:

# 进入脚本所在目录(设FISCO-BCOS位于~/mydata目录)
cd ~/mydata/FISCO-BCOS/tools/scripts

# 在~/mydata目录下生成国密版FISCO BCOS链证书
#--------------------------------------------------------
#-o : 生成的链证书所在路径,这里是~/mydata
#-g :生成国密链证书,这里必须设置
# 注: (若要手动输入链证书信息,请在下面命令最后加上-m选项)
#--------------------------------------------------------
$ bash ./generate_chain_cert.sh -o ~/mydata -g
# 此时/mydata目录下生成链证书私钥gmca.key、证书gmca.crt和参数gmsm2.param
$ ls ~/mydata/
gmca.crt  gmca.key  gmsm2.param

# 查看链证书脚本generate_chain_cert.sh使用方法:
$ bash ./generate_chain_cert.sh -h
Usage:
 -o <ca dir> Where ca.crt ca.key generate  # CA证书生成目录
 -m Input ca information manually    # 手动输入CA信息
 -g Generate chain certificates with guomi algorithms #生成国密版链证书
 -d The Path of Guomi Directory  #GM证书生成脚本所在路径,默认为FISCO-BCOS/cert/GM
 -h This help
Example:
 ./generate_chain_cert.sh -o /mydata -m  # 非国密版链证书生成用法,手动输入证书信息
 ./generate_chain_cert.sh -o /mydata     # 非国密版链证书生成用法,使用默认证书信息
guomi Example:
 ./generate_chain_cert.sh -o ~/mydata -m -g # 国密版链证书生成用法,手动输入证书信息
 ./generate_chain_cert.sh -o ~/mydata -g    # 国密版链证书生成用法,使用默认证书信息

生成机构证书

generate_agency_cert.sh 脚本用于生成机构证书:

# 进入脚本所在目录(设FISCO-BCOS位于~/mydata目录)
$ cd ~/mydata/FISCO-BCOS/tools/scripts

#--------------------------------------------------------
# -c: 链证书所在目录,这里是~/mydata
# -o: 生成的机构证书所在目录,这里是~/mydata
# -n: 机构证书名,这里是test_agency
# -g: 生成国密机构证书,这里必须设置
# 注: (若要手动输入机构证书信息,请在下面命令最后加上-m选项)
#--------------------------------------------------------
$ bash ./generate_agency_cert.sh -c ~/mydata -o ~/mydata -n test_agency -g 

# 此时~/mydata/test_agency目录下生成机构证书gmagency.crt和证书私钥gmagency.key
$ ls ~/mydata/test_agency/
gmagency.crt  gmagency.key  gmca.crt  gmsm2.param

# 查看generate_agency_cert.sh脚本用法
$ bash ./generate_agency_cert.sh -h
Usage:
 -c <ca dir> The dir of ca.crt and ca.key  # 指定颁发机构证书的CA证书和私钥所在目录
 -o <output dir> Where agency.crt agency.key generate # 指定机构证书输出目录
 -n <agency name> Name of agency  # 指定机构名
 -m Input agency information manually  # 若设置,表明手动输入机构证书信息,否则使用默认信息
 -g Generate agency certificates with guomi algorithms # 生成国密版机构证书
 -d The Path of Guomi Directory
 -h This help
Example:
 bash ./generate_agency_cert.sh -c /mydata -o /mydata -n test_agency # 非国密版机构证书生成示例
 bash ./generate_agency_cert.sh -c /mydata -o /mydata -n test_agency -m
guomi Example:          #国密版机构证书生成示例
 bash ./generate_agency_cert.sh -c ~/mydata -o ~/mydata -n test_agency -g
 bash ./generate_agency_cert.sh -c ~/mydata -o ~/mydata -n test_agency -m -g

生成节点证书

generate_node_cert.sh 脚本用于生成节点证书:

# 进入脚本所在目录(设FISCO-BCOS位于~/mydata目录)
$ cd ~/mydata/FISCO-BCOS/tools/scripts

# 使用~/mydata/test_agency目录下机构证书为节点node0颁发证书,生成的证书置于~/mydata/node0/data目录下
#--------------------------------------------------------
# -a: 机构证书名,这里是test_agency
# -d: 机构证书所在路径,这里是~/mydata/test_agency
# -n: 节点名称,这里是node0
# -o: 节点证书所在路径,这里是~/mydata/node0/data
# -s: sdk证书名,这里是sdk1
# -g: 生成国密节点证书,这里必须设置
# (若要手动输入节点证书信息,请在下面命令最后加上-m选项)
#--------------------------------------------------------
$ bash ./generate_node_cert.sh -a test_agency -d ~/mydata/test_agency -n node0 -o ~/mydata/node0/data -s sdk1 -g

# 此时在~/mydata/node0/data目录下生成节点证书&&客户端连接证书
 $ ls ~/mydata/node0/data -1
ca.crt      # 节点和客户端验证所需的CA证书
ca.key
client.keystore
gmagency.crt
gmca.crt
gmennode.crt
gmennode.key
gmnode.ca
gmnode.crt
gmnode.json
gmnode.key
gmnode.nodeid
gmnode.private
gmnode.serial
sdk1            #存储客户端连接节点证书
server.crt
server.key

# 设编译好的web3sdk位于~/mydata/web3sdk目录下,则将客户端证书拷贝到相应目录:
$ cp ~/mydata/node0/data/sdk1/* ~/mydata/web3sdk/dist/conf

# 查看节点证书脚本generate_node_cert.sh用法
$ bash ./generate_node_cert.sh  -h
Usage:
 -a <agency name> The agency name that the node belongs to # 为节点颁发证书的机构名
 -d <agency dir> The agency cert dir that the node belongs to # 机构证书所属目录
 -n <node name> Node name  # 节点名
 -o <output dir> Data dir of the node # 节点证书存放目录
 -m Input agency information manually # 手动输入节点证书信息
 -r The path of GM shell scripts directory 
 -g generate guomi cert # 产生国密版节点证书
 -s the sdk name to connect with the node # 产生国密版节点证书时,必须产生sdk证书,-s指定sdk名称
 -h This help
Example: # 非国密版节点证书生成示例
 bash ./generate_node_cert.sh -a test_agency -d /mydata/test_agency -n node0 -o /mydata/node0/data
 bash ./generate_node_cert.sh -a test_agency -d /mydata/test_agency -n node0 -o /mydata/node0/data -m
guomi Example: #国密版FISCO-BCOS节点证书生成示例
 bash ./generate_node_cert.sh -a test_agency -d ~/mydata/test_agency -n node0 -o ~/mydata/node0/data -s sdk1 -g
 bash ./generate_node_cert.sh -a test_agency -d ~/mydata/test_agency -n node0 -o ~/mydata/node0/data -m -s sdk1 -g

SDK证书

生成节点证书时,会在节点目录下同时生成SDK证书,如上例中node0的sdk证书位于/mydata/node0/data/sdk1目录。 也可使用gmsdk.sh 脚本手动生成sdk证书,但生成后需要:

# 进入脚本所在目录(设FISCO-BCOS位于~/mydata目录)
$ cd ~/mydata/FISCO-BCOS/tools/cert/GM

# 执行国密版SDK生成脚本gmsdk
#--------------------------------------------------------
# 注: 生成SDK证书时,不能输入空口令,口令长度至少为6个字符
#--------------------------------------------------------
$ bash ./gmsdk.sh sdk1 #生成的sdk证书位于sdk1目录下

# 用新生成的sdk证书sdk要连接的节点相关证书(设sdk要连接node0)
$ cp sdk1/* ~/mydata/node0/data/

注意事项

FISCO-BCOS采用三级证书链【链证书–> 机构证书—> 节点证书】认证,同一条链的所有机构证书必须由同一个链证书颁发,节点间证书认证才能成功。