配置SDK

证书配置

FISCO BCOS作为联盟链,SDK连接区块链节点时通过SSL进行双向认证。JavaSDK支持SSL与国密SSL两种认证方式。

SSL连接配置

国密区块链和非国密区块链环境下,节点与SDK之间均可以建立SSL的连接,将节点所在目录nodes/${ip}/sdk/目录下的ca.crtsdk.crtsdk.key文件拷贝到项目的资源目录。(低于2.1版本的FISCO BCOS节点目录下只有node.crtnode.key,需将其重命名为sdk.crtsdk.key以兼容最新的SDK)

国密SSL连接配置

FISCO-BCOS 2.5及之后的版本,在国密区块链环境下支持节点与SDK建立国密SSL连接,将节点所在目录nodes/${ip}/sdk/gm/目录下的gmca.crtgmensdk.crtgmensdk.keygmsdk.crtgmsdk.key文件拷贝到项目的资源目录。

重要

  • 国密SSL连接只有在国密区块链环境下才可以使用。
  • 是否选择国密SSL连接,SDK与区块链节点的配置要保持一致,节点配置参考 配置链属性

配置文件设置

Java应用的配置文件需要做相关配置。值得关注的是,FISCO BCOS 2.0+版本支持多群组功能,SDK需要配置群组的节点信息。将以Spring项目和Spring Boot项目为例,提供配置指引。

Spring项目配置

提供Spring项目中关于applicationContext.xml的配置下所示。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  8. http://www.springframework.org/schema/tx
  9. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
  10. http://www.springframework.org/schema/aop
  11. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
  12. <bean id="encryptType" class="org.fisco.bcos.web3j.crypto.EncryptType">
  13. <constructor-arg value="0"/> <!-- 0:standard 1:guomi -->
  14. </bean>
  15. <bean id="groupChannelConnectionsConfig" class="org.fisco.bcos.channel.handler.GroupChannelConnectionsConfig">
  16. <!-- SSL certificate configuration -->
  17. <property name="caCert" value="ca.crt" />
  18. <property name="sslCert" value="sdk.crt" />
  19. <property name="sslKey" value="sdk.key" />
  20. <!-- GM SSL certificate configuration -->
  21. <property name="gmCaCert" value="gmca.crt" />
  22. <property name="gmEnSslCert" value="gmensdk.crt" />
  23. <property name="gmEnSslKey" value="gmensdk.key" />
  24. <property name="gmSslCert" value="gmsdk.crt" />
  25. <property name="gmSslKey" value="gmsdk.key" />
  26. <property name="allChannelConnections">
  27. <list> <!-- 每个群组需要配置一个bean,每个群组可以配置多个节点 -->
  28. <bean id="group1" class="org.fisco.bcos.channel.handler.ChannelConnections">
  29. <property name="groupId" value="1" /> <!-- 群组的groupID -->
  30. <property name="connectionsStr">
  31. <list>
  32. <value>127.0.0.1:20200</value> <!-- IP:channel_port -->
  33. <value>127.0.0.1:20201</value>
  34. </list>
  35. </property>
  36. </bean>
  37. <bean id="group2" class="org.fisco.bcos.channel.handler.ChannelConnections">
  38. <property name="groupId" value="2" /> <!-- 群组的groupID -->
  39. <property name="connectionsStr">
  40. <list>
  41. <value>127.0.0.1:20202</value>
  42. <value>127.0.0.1:20203</value>
  43. </list>
  44. </property>
  45. </bean>
  46. </list>
  47. </property>
  48. </bean>
  49. <bean id="channelService" class="org.fisco.bcos.channel.client.Service" depends-on="groupChannelConnectionsConfig">
  50. <property name="groupId" value="1" /> <!-- 配置连接群组1 -->
  51. <property name="agencyName" value="fisco" /> <!-- 配置机构名 -->
  52. <property name="allChannelConnections" ref="groupChannelConnectionsConfig"></property>
  53. </bean>
  54. </beans>

applicationContext.xml配置项详细说明:

  • encryptType: 国密开关(默认为0,关闭)
    • 0: 不使用国密
    • 1: 使用国密
      • 开启国密功能,需要连接的区块链节点是国密节点,搭建国密版FISCO BCOS区块链参考这里)
      • 使用国密SSL,在国密区块链环境基础上,SDK需要打开encryptType开关,然后配置国密SSL证书
  • groupChannelConnectionsConfig:
    • 配置待连接的群组,可以配置一个或多个群组,每个群组需要配置群组ID
    • 每个群组可以配置一个或多个节点,设置群组节点的配置文件config.ini[rpc]部分的channel_listen_ip(若节点小于v2.3.0版本,查看配置项listen_ip)和channel_listen_port
    • SSL配置项: SDK与节点SSL连接时使用
      • caCertSL连接根证书路径
      • sslCertSDK证书路径
      • sslKeySDK证书私钥路径
    • 国密SSL配置项: SDK与节点国密SSL连接时使用
      • gmCaCert国密SSL连接根证书路径
      • gmEnSslCert国密SSL连接加密证书路径
      • gmEnSslKey国密SSL连接加密证书私钥路径
      • gmSslCertSSL连接签名证书路径
      • gmSslKeySSL连接签名证书私钥路径
  • channelService: 通过指定群组ID配置SDK实际连接的群组,指定的群组ID是groupChannelConnectionsConfig配置中的群组ID。SDK会与群组中配置的节点均建立连接,然后随机选择一个节点发送请求。

备注:刚下载项目时,有些插件可能没有安装,代码会报错。当你第一次在IDEA上使用lombok这个工具包时,请按以下步骤操作:

  • 进入setting->Plugins->Marketplace->选择安装Lombok plugin
  • 进入设置Setting-> Compiler -> Annotation Processors -> 勾选Enable annotation processing。

Spring Boot项目配置

提供Spring Boot项目中关于application.yml的配置如下所示。

  1. encrypt-type: # 0:普通, 1:国密
  2. encrypt-type: 0
  3. group-channel-connections-config:
  4. caCert: ca.crt
  5. sslCert: sdk.crt
  6. sslKey: sdk.key
  7. all-channel-connections:
  8. - group-id: 1 #group ID
  9. connections-str:
  10. # 若节点小于v2.3.0版本,查看配置项listen_ip:channel_listen_port
  11. - 127.0.0.1:20200 # node channel_listen_ip:channel_listen_port
  12. - 127.0.0.1:20201
  13. - group-id: 2
  14. connections-str:
  15. # 若节点小于v2.3.0版本,查看配置项listen_ip:channel_listen_port
  16. - 127.0.0.1:20202 # node channel_listen_ip:channel_listen_port
  17. - 127.0.0.1:20203
  18. channel-service:
  19. group-id: 1 # sdk实际连接的群组
  20. agency-name: fisco # 机构名称

application.yml配置项与applicationContext.xml配置项相对应,详细介绍参考applicationContext.xml配置说明。