前面几个章节,讲解了 config.ini 中 rpc, p2p 这两个重要的配置项,现在我们来讲解下剩余的配置项的作用。也可以查看 官网 了解详细信息。
1. certificate_blacklist
查看 nodes/127.0.0.1/node0/config.ini 文件,可以看到有一个 certificate_blacklist 配置项。我们演示下这个配置项的作用
首先进入 nodes/127.0.0.1/node1/conf 目录,使用 cat node.nodeid 命令查看 node1 的 nodeid。 nodeid 是就是每个节点的身份证,用于唯一的区别每个节点。
同时,我查看下 node1 的的 p2p 端口,方便进行结果查验。进入到 nodes/127.0.0.1/node1 目录,查看 config.ini 文件中的 listen_port, 这里我们看到 node1 的 listen_port 是 30301。
这里获取到 node1 的 nodeid 和 listen_port 后,再次进入到 nodes/127.0.0.1/node0/log 目录。首先,我们查看下 node0 和 node1 的 p2p 连接。执行如下命令,首先 ls -lrt 获取最新的日志文件
然后使用 grep 命令查看和 node0 和 node1 的连接。这里,我们看到和 30301 ( 即 node1 ) 节点的 p2p 连接正常
进入 nodes/127.0.0.1/node0 ,编辑 config.ini 文件如下。这里我们现在只添加来一条记录,如果要添加多条记录,依次增加 crl.1, crl.2 , crl.3 等等。 编辑成功后,重启 node0 。重点提醒,修改配置后要记得重启节点。
重启 node0 成功。
进入 nodes/127.0.0.1/node0/log 目录,使用 lrt 获取最新的日志文件,然后 grep 30301 查看连接信息。这里,我们看到node0 拒绝和 node1 建立连接。所以从这里我们可以看到, certificate_blacklist 的作用就是把目标节点拉黑。这个配置可能用到的场景是,比如当前你这个节点下面有很多小弟节点 比如 (100 个 ),这些小弟节点通过你这个节点和其他的节点建立连接,但有一天,你和其中的几个小弟闹翻来,你想把他们拉黑,这时就可以通过这个 certificate_blacklist 配置项进行。
最后,我们还原下 node0/node1/node2/node3 中的 config.ini 配置,以便为后续实验做好准备。
2. certificate_whitelist
介绍了 certificate_blacklist , 那么 certificate_whitelist 就很好理解了。certificate_whitelist 的作用和 certificate_blacklist 正好相反,当配置了 certificate_whitelist 时,只有 certificate_whitelist 中的节点允许和当前节点连接,其他节点请求连接时,会被拒绝。
那么,又有另一个问题了,当 certificate_blacklist 和 certificate_whitelist 同时配置时,并且其中配置了相同的 nodeid 时,会出项什么情况呢。官网 中进行明确说明。 “黑名单与白名单混合配置:黑名单优先级高于白名单,白名单配置的基础上拒绝与node1建立连接“
3. group 配置项
group 这里的配置项意义很简单,就是节点的数据目录和配置文件存放的路径。这里一般没有特殊需要,我们不用进行修改。这里有一点需要注意的时,如果节点配置的存储方式为 mysql ,那么数据就全部存储在 mysql 中, group_data_path 这个配置项就没有什么作用。在后续的文章中,会介绍 mysql 等各种存储方式
4. network_security
这个配置项也很简单,就是证书的存放路径,这里的配置也很少进行修改。
5. storage_security
这个配置项时数据存储时是否需要加密的意思。因为节点数据都是明文存储,特别时当你的节点存储模式配置为 mysql 的时候,任何人只要能登陆到 mysql ,就可以查看你其中存储的数据。这个配置项就是对存储的数据进行加密,然后存储的本地磁盘或是 mysql 中。那么具体怎么加密呢,让我们来进行实验下。 也可以参考 官方文档 查看对应说明。
5.1 重置链
实验之前我们先还原下所有的配置和链 ( 如果已经还原,可以跳过此步骤 )
进入 nodes/127.0.0.1 目录,执行 ./stop_all.sh 停止,所有的节点。
删除所有节点数据。好了至此,我们的准备工作已经完成,先不启动节点,等 key-manager 启动之后,还需要进行相应的配置。
rm -rf node*/data node*/log
5.2 编译 & 启动 key-manager
去 git 上下载 key-manager , 然后进行根据提示进行安装。首先安装一下依赖
# In Centos
sudo yum install procps-ng-devel
sudo yum install curl-devel
# In ubuntu
sudo apt-get install libprocps-dev
# In ArchLinux
sudo pacman -S procps-ng
进行编译
git clone https://github.com/FISCO-BCOS/key-manager.git
cd key-manager && mkdir build && cd build
# For Centos
cmake3 ..
# Notice: There are ".." behind. # cmake3 .. -DBUILD_GM=On #When building "guomi" key-manager
# For ubuntu
cmake ..
# Notice: There are ".." behind. # cmake .. -DBUILD_GM=On #When building "guomi" key-manager
make
#The execution: "key-manager" generated.
启动 key-manager。
开启另一个命令行窗口,进入到 key-manager/scripts 目录,然后执行如下命令。然后我们就可以看到如下输出。
bash gen_data_secure_key.sh 127.0.0.1 8150 123456
5.3 加密节点私钥
进入 key-manager/scripts 目录,执行如下命令。注意,这里命令行最后一个参数就是上面的 cipher_data_key。其中 "/root/fisco/nodes/127.0.0.1/node0/conf/node.key" 为 node0 的 node.key 文件所在路径。至此我们 key-manager 的操作已经完成了。下面就可以去节点处进行相应的配置。
bash encrypt_node_key.sh 127.0.0.1 8150 /root/fisco/nodes/127.0.0.1/node0/conf/node.key ed157f4588b86d61a2e1745efe71e6ea
5.4 配置 storage_security
进入 nodes/127.0.0.1/node0 目录,修改 config.ini 配置文件。注意这里的 config.ini 中 storage_security 需要和我们刚刚执行 gen_data_secure_key.sh 产生的配置需要保持一致。
5.5 启动节点
现在我们就可以启动我们的节点了。在 nodes/127.0.0.1 目录下,执行 start_all.sh , 我们看到 node0 启动成功了。这里感觉和普通的节点启动没有什么不一样的啊。还没有完呢。
如果我们把 key-mananger 进程关掉,然后再此启动节点试试。进入 key-manager 的终端窗口,然后 ctrl + c 关闭 key-manager 进程。
然后,进入到 nodes/127.0.0.1/node0 目录,重启下。我们可以看到,stop 成功后,启动节点时,节点启动失败了。那么,这里证明了我们的第一个想法,配置了落盘加密的节点,启动时必须要连接对应的 key-manager 才行。
下面证明下我们的第二个才想,当启动的 key-manager 对应的 superkey 不匹配时,节点能否启动成功。进入到 key-manager/build 目录,然后使用如下命令启动。注意,这里我们使用的 superkey 为 123xyz111 ,而且之前启动使用的 superkey 为 123xyz 。
之后,进入到 nodes/127.0.0.1/node0 目录,启动 node0 节点。我们看到启动还是失败了。那么这里证明了第二个猜想,key-manager 启动时,superkey 要匹配,节点才能启动成功。不然节点启动失败
5.6 总结
落盘加密的目的时保护数据,防止数据被盗取后,他人读取节点中的数据。
5.7 还原 node0
为了后续的实验,我们这里要还原下 node0 的配置。首先,进入到 nodes/127.0.0.1/node0 , 然后修改 config.ini 文件内容如下 , 修改 storage_security 中的 enable 为 false。
然后进入到 nodes/127.0.0.1/node0/conf 执行如下命令。这里我们看到 conf 目录下有两个 node.key 文件。其中 node.key.bak.xxxx 是 key-manager 进行的备份文件,我们需要把这个 bak 文件还原。
再次进入 nodes/127.0.0.1/node0 目录执行如下命令。注意这里我们需要 rm -rf data 即删除 node0 的数据文件,然后让 node0 去其他节点同步所有的数据过来。我会在后续的文章中讲解节点之间的数据同步。这里大家可以先不用详细了解,也可以去 FISCO 官网进行详细了解。
当然还有一个简单的办法,就是在 fisco/nodes/127.0.0.1/ 目录下 ./stop_all.sh 停止所有进程,然后删除 nodes 目录,之后重新搭建一条链即可。