一、网络的三类端口
区块链网络由多个互相连接的节点构成,每个节点又与客户端、浏览器和监控工具等相连接。区块链网络包括P2P端口、RPC端口和Channel端口。
1.P2P端口
P2P端口,用于区块链节点之间的互联,包括机构内的多个节点以及多机构间节点和节点的互联。如果其他节点在机构外,那么这个连接要监听公网地址或者监听内网,且由连接公网的网关(如nginx)转发网络连接。节点之间的连接会由联盟链的准入机制控制,节点之间连接依靠节点证书验证以排除未经许可的危险连接。这个链路上的数据通过SSL方式加密,采用高强度密钥可以有效的保护通信安全。
2.RPC端口
RPC是客户端与区块链系统交互的一套协议和接口,用户通过RPC接口可以查区块链相关信息(如块高、区块、节点连接等)和发送交易。
RPC端口接受JSON-RPC格式的请求发送到节点来处理。当发送交易时,客户端需实现交易签名。要注意的是,RPC连接没有做证书验证,且网络传输默认是明文的,安全性相对不高,建议只监听内网端口,用于监控、运营管理、状态查询等内部的工作流程上。
3.Channel端口
Channel端口,控制台和客户端SDK连接Channel端口,互相之间要通过证书验证,只有经过认证的客户端才能向节点发起请求,通信数据也是采用SSL方式(一种运行在传输层和应用层之间的加密方式)加密。Channel端口使用了TCP的长连接,用心跳包检测和保持存活,通信效率较高高。Channel端口应只监听内网IP地址,供机构内其他的应用服务器通过SDK连接,不应监听外网地址或接受公网的连接,以免发生不必要的安全问题。也不要只监听本地地址(127.0.0.1或localhost),否则其他应用服务器将无法连接到节点上。
4.端口间网络策略
节点间P2P端口需开通白名单,要求四个节点的P2P端口实现全互联;节点的Channel端口需开通白名单,要求只允许本机构内特定IP的应用(如控制台、SDK)可连接;节点的RPC端口不能对外开放,只允许同机的监控脚本及区块链浏览器访问。
三、联盟链的证书结构
三级证书结构自上而下分别为链证书、机构证书和节点证书。证书内容包括链证书版本号、序列号、证书的签名算法、消息摘要算法等生成信息;同时包括了证书的颁发者、有效期、使用者、公钥信息、SSL通信需要用到的密码套件等信息。
节点通过加载证书,在接受数据包时,根据证书规定的密码套件和其消息字段,对数据包中携带的证书进行验证。
联盟链的证书结构中有4种角色,分别是联盟链委员会、联盟链成员机构、联盟链参与方(节点和SDK)。证书生成流程如下:
1.联盟链委员会初始化根证书ca.crt
- 本地生成私钥ca.key;
- 自签生成根证书ca.crt。
2.联盟链成员机构获取机构证书agency.crt
- 本地生成私钥agency.key;
- 由本地私钥生成证书请求文件agency.csr;
- 将证书请求文件agency.csr发送至联盟链委员会;
- 联盟链委员会使用ca.key对证书请求文件agency.csr进行签发,得到联盟链成员机构证书agency.crt;
- 联盟链委员会将联盟链成员机构证书agency.crt发送至对应成员。
3.节点/SDK获取证书node.crt
- 本地生成私钥node.key;
- 由本地私钥生成证书请求文件node.csr;
- 将证书请求文件node.csr发送至联盟链成员机构;
- 联盟链成员机构使用agency.key对请求文件node.csr进行签发,得到节点/SDK证书node.crt;
- 联盟链成员机构将节点证书node.crt发送至相应节点。