SDK连接证书配置

标签: SDK证书配置


在使用SDK开发应用时,与节点进行交互需要使用节点的证书文件。FISCO BCOS 3.x版本提供了三种节点的部署模式,每种部署模式下节点的SDK证书文件略有不同,本文以 Java SDK 为例,分别介绍在三种节点模式下,SDK应用证书配置的正确方式。

单群组区块链(Air版本)部署模式

单群组区块链(Air版本) 采用all-in-one的封装模式,将所有模块编译成一个二进制(进程),一个进程即为一个区块链节点。

Air版本的安装部署请参考:链接

build_chain.sh生成的节点配置中与SDK连接相关的配置主要为:

  • SDK连接证书: 由build_chain.sh生成,客户端可拷贝该证书与节点建立SSL连接。

单机四节点Air版本非国密区块链的配置文件组织示例如下(已忽略与本文介绍无关的文件):

nodes/
├── 127.0.0.1
│   │.....
│   ├── sdk # SDK证书
│   │   ├── ca.crt 		# SSL连接根证书
│   │   ├── cert.cnf 	# SSL证书配置
│   │   ├── sdk.crt 	# SSL连接证书
│   │   └── sdk.key 	# SSL证书私钥
│   ├── ......

单机四节点Air版本国密区块链的配置文件组织示例如下(已忽略与本文介绍无关的文件):

nodes/
├── 127.0.0.1
│   │.....
│   ├── sdk # SDK证书
│   │   ├── sm_ca.crt 		# 国密SSL连接根证书
│   │   ├── sm_ensdk.crt 	# 国密SSL加密证书
│   │   ├── sm_ensdk.key	#	国密SSL加密证书私钥
│   │   ├── sm_sdk.crt		# 国密SSL连接签名证书
│   │   ├── sm_sdk.key		# 国密SSL连接签名证书私钥
│   │   └── sm_sdk.nodeid	# 国密节点ID
│   ├── ......

在使用Java SDK时,在项目已编译的dist目录下将节点SSL证书复制到conf目录下:

注意:为了演示方便,这里的SDK应用路径默认为~/fisco中,在使用时请以实际路径为准。

# 为了演示方便,在~/fisco目录下有Java SDK应用,并使用build_chain.sh建链脚本搭建了区块链节点
tree -L 1 ~/fisco
~/fisco
├── java-sdk-demo		# Java SDK应用
├── build_chain.sh 	# 建链脚本
└── nodes						# 节点目录

# 进入SDK应用目录
# SDK应用路径请以实际为准
cd ~/fisco/java-sdk-demo/

# 编译SDK应用
bash gradlew build

# 编译完成后,将会在项目根目录下生成dist文件夹
cd dist

# 将节点的证书全部拷贝进SDK配置文件夹中
cp -r ~/fisco/nodes/127.0.0.1/sdk/* ~/fisco/java-sdk-demo/dist/conf

# Done, 接下来配置SDK的使用配置文件即可,Have fun :)

多群组区块链(Pro版本)部署模式

多群组区块链(Pro版本) 包括RPC、Gateway接入层的服务和多个区块链节点Node服务组成,其中一个Node服务代表一个群组,存储采用本地RocksDB,所有Node共用接入层服务。

Pro版本的安装部署请参考:链接

在完成部署RPC服务之后,在generated/rpc/chain下将会生成所有需要用到的配置文件。其中,与SDK SSL连接的配置如下(已忽略与本文介绍无关的文件):

tree generated/rpc/chain
generated/rpc/chain
├── 172.25.0.3 # 请以实际IP为准
│   ├── agencyABcosRpcService # 机构A的RPC服务目录
│   │   ├── sdk               # SDK证书目录,SDK客户端可从本目录拷贝证书连接RPC服务
│   │   │   ├── ca.crt				# SSL连接根证书
│   │   │   ├── cert.cnf			# SSL证书配置
│   │   │   ├── sdk.crt				# SSL连接证书
│   │   │   └── sdk.key				# SSL证书私钥
│   │   └── ssl               # RPC服务证书目录
│   └── agencyBBcosRpcService # 机构B的RPC服务配置目录
│       ├── config.ini.tmp    # 机构B的RPC服务的配置文件
│       ├── sdk               # SDK证书目录,SDK客户端从本目录拷贝证书连接RPC服务
│       │   ├── ca.crt
│       │   ├── cert.cnf
│       │   ├── sdk.crt
│       │   └── sdk.key
│       └── ssl              # RPC服务证书目录
└── ca                       # CA证书目录

在使用Java SDK时,在项目已编译的dist目录下将节点SSL证书复制到conf目录下:

注意:为了演示方便,这里的SDK应用路径默认为~/fisco中,在使用时请以实际路径为准。

# 为了演示方便,在~/fisco目录下有Java SDK应用,并使用build_chain.sh建链脚本搭建了区块链节点
tree -L 2 ~/fisco
~/fisco
├── java-sdk-demo		# Java SDK应用
└── BcosBuilder
    ├── build_chain.py
    ├── conf
    ├── docker
    ├── generated		# 生成节点目录
    ├── requirements.txt
    └── src

# 进入SDK应用目录
# SDK应用路径请以实际为准
cd ~/fisco/java-sdk-demo/

# 编译SDK应用
bash gradlew build

# 编译完成后,将会在项目根目录下生成dist文件夹
cd dist

# 将节点的证书全部拷贝进SDK配置文件夹中
cp -r ~/fisco/BcosBuilder/generated/rpc/chain0/agencyABcosRpcService/172.25.0.3/sdk/* ~/fisco/java-sdk-demo/dist/conf

# Done, 接下来配置SDK的使用配置文件即可,Have fun :)

附录:确认区块链的密码学环境类型(非国密/国密)

在Air版本模式和Pro版本模式中,搭建完区块链节点之后均会生成节点的配置文件config.ini。从文件config.ini中即可判断当前区块链的密码箱环境类型是国密还是非国密。

由于SDK是直接与区块链节点的RPC模块直接连接的,因此在这里我们只需要关注RPC的配置即可:

[rpc]
    listen_ip=0.0.0.0
    listen_port=20200
    thread_count=4
    ; ssl是否使用国密模式连接
    sm_ssl=false

Air版本的RPC配置详情请参考链接:配置RPC

Pro版本的RPC配置详情请参考链接:rpc服务