中移链结合CA证书实现节点准入控制

news/2024/4/24 11:09:08/文章来源:https://blog.csdn.net/BSN_yanxishe/article/details/129194636

01

背景介绍

BSN开放联盟链(BSN Open Permissioned Blockchain, 简称OPB)包括多条基于公有链框架和联盟链框架搭建的公用链,开发者可以选择适合应用业务需求的开放联盟链部署和运行智能合约和分布式应用,每条开放联盟链各有特点和优势,均使用类似公有链的燃料机制通过人民币计价,使用方便简洁。在符合国家监管政策的前提下,实现“开箱即用、快速上链”!

中移链是由中国移动区块链团队在EOS基础上对底层框架进行的改造,在满足我国信息化监管需求、合规可控的前提下,打造的中国移动区块链服务平台,不仅丰富了BSN的技术体系,同时为BSN生态中的企业和开发者用户提供了更加多元化的技术选择。

为了适配BSN开放联盟链-公有链可按自身框架特点选择基于信任 BSN根CA统一颁发的节点身份证书,中移链基于EOS底层进行改造,在节点之间增加了CA证书认证,同时节点准入配置无需节点重启,可动态加载,修改后实时生效。

02

技术架构

EOS节点通信基于P2P网络进行通信,P2P网络是指由对等节点组成的网络,没有服务端,客户端的区别。节点通常采用TCP协议、使用指定端口与相邻节点建立连接,建立连接时也会有认证 “握手” 的通信过程(handshake_message)。基于P2P网络的特性,区块链节点可以随意加入和退出。中移链是在EOS基础上对其底层框架进行改造,完全继承了EOS所拥有高性能处理能力、易于开发以及用户免费等优势。

鉴于P2P网络的特性,无法满足BSN开放联盟链需要的安全准入原则。因此,中移链在P2P节点中加入TLS证书准入机制,通过TLS证书进行私有访问控制,以控制哪些参与者可以访问和使用私有中移链网络,通过在参与者节点之间建立TLS连接来满足安全连接要求,只有拥有正确证书的节点才能加入网络,以此完成对接入节点的访问控制。

整体EOS架构图如下:

  • BLOCK.LOG

存储区块信息。

  • CHAINBASE/ROCKSDB

内存表信息。

  • FORKDB

用于存储候选的块分支。

  • 节点之间P2P通信协议

主要目标是同步有效的块,转发交易。本次改造基于NET_PLUGIN插件,增加TLS证书对P2P节点进行认证。

  • DPOS共识机制

是一种基于投票选举的共识算法,类似于代议制民主。在POS的基础上,DPOS先选举若干代理人,由代理人验证和记账,代理人之间轮流出块。

  • EOS-VM

负责加载和解析编译后的智能合约字节码,也就是WASM。

  • WASM

负责执行字节码来计算智能合约运行的结果。

  • ABI

为二进制接口文件,用于描述智能合约的接口信息。

  • CLEOS

包含NODEOS和KEOSD模块,NODEOS用于节点启动和管理,KEOSD用于钱包管理。

03

证书与TLS原理介绍

数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份,因此数字证书又称为数字标识。

SSL证书,也称为服务器SSL证书,将SSL证书安装在网站服务器上,可实现网站身份验证和数据加密传输双重功能。SSL协议及其继任者TLS协议,是一种实现网络通信加密的安全协议,可在客户端(浏览器)和服务器端(网站)之间建立一条加密通道,保证数据在传输过程中不被窃取或篡改。

中移链通过TLS证书认证,完成了节点的身份管控,确保只有携带正确证书的节点才能进行P2P接入。TLS握手是安全超文本传输协议(HTTPS)通信技术的一部分,本次改造后区块链节点正是使用HTTP和TLS证书进行安全的通信,整套通信流程如下:

中移链中节点的TLS握手包括以下步骤:

1. 待接入节点会打开一个TLS认证并连接到链主节点。

2. 主节点尝试通过请求可识别信息来验证接入节点的真实性。

3. 待接入节点发送包含公钥的TLS证书作为回复。

4. 主节点会验证TLS证书,确保其有效且与用户名匹配。主节点对TLS证书验证通过,会使用公钥加密并发送包含密钥的消息给接入节点。

5. 待接入节点使用其私钥解密消息并检索会话密钥,然后使用会话密钥加密并向链主节点发送确认消息。

04

中移链实现节点准入控制改造

在现有的EOS发行版本中,所有P2P节点接入只有HTTP协议,缺少TLS证书所需环境。在本次改造中引入了OpenSSL库,该库包含一个类以及类模板,主要用于对SSL认证功能的支持。基于SSL库中流的特点,在区块链进行P2P连接时, P2P套接字会包装到SSL流中,在已经存在的流上层做了一层加密并构造一个SSL上下文对象,这个对象用于设置SSL认证的参数(如认证模式、认证文件等)

想要启用证书验证功能,只需要在net配置中添加p2p-tls*等参数。在配置这些参数以后,验证才会启动,其中p2p-tls-security-group-ca-file为CA中心的认证文件。所以加入的节点都需要从一个CA认证中心中生成有效TLS证书才能加入P2P网络。

实际使用中,在启动第一个出块节点时,可选择是否启动准入控制。如下图,在节点启动参数中配置了p2p-tls\*等参数以后,参数分别为CA中心认证,由CA中心颁发的节点证书和证书的key。在第一个节点启动后,系统会检测p2p-tls*等参数,自动启动TLS证书校验。

后续节点需要携带相同CA中心颁发的TLS证书才能连接到主链进行同步。通过改造EOS的代码,增加SSL库和配置参数解析,中移链实现了公链对准入控制的改造。

05

节点准入控制验证

基于中移链最新版本,进行了多轮测试。

通过TLS证书进行节点准入控制:

1. 修改node1节点chain.js文件,加入ca认证中心和node1签名证书

2. 启动node1节点

3. 启动后节点正常出块

4. 配置node2证书

5. 启动node2节点

6. node2正常同步块

06

意义

区块链近年来飞速发展,联盟链在符合我国监管政策要求的前提下,已经为实体经济所服务。BSN开放联盟链 (Open Permissioned Blockchain) 是一种介于公链和联盟链之间的底层框架,具有以下特点:第一开放,所有人可以自由使用;第二联盟,对区块链网络节点的加入和退出实现管控。中移链结合CA证书实现节点准入控制,完成了联盟链改造需求,正式加入开放联盟链队列。并且相对于公链,开放联盟链中的节点数量更少,只需少量节点参与便可完成共识过程,进一步提升交易处理效率。

07

参考链接

BSN开放联盟链:

https://opb.bsnbase.com/main/index

官方EOSIO基础介绍:

https://developers.eos.io/welcome/latest/introduction-to-eosio/index

官方EOSIO的CLEOS(命令行工具):

https://developers.eos.io/manuals/eos/latest/cleos/index/?query=cleos&page=1#gatsby-focus-wrapper

官方EOSIO的Net Plugin(网络模块):

https://developers.eos.io/manuals/eos/latest/nodeos/plugins/net_plugin/index/?query=net_plugin&page=1#gatsby-focus-wrapper

亚马逊SSL/TLS证书介绍:

https://aws.amazon.com/cn/what-is/ssl-certificate/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_73735.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

码匠 × OpenAI :快速生成 SQL 语句,提升开发效率!

目录 使用 OpenAI 生成 SQL 码匠连接与集成 OpenAI 总结 关于码匠 在码匠中,编写 SQL 语句,并结合码匠一系列开箱即用的组件实现复杂的业务逻辑,是很常见的应用开发场景。然而,不同的数据库在 SQL 增删改查操作语法、类型字段和…

Java知识复习(二)Java集合

1、List、Set和Map的区别 List:存储的顺序是有序的、可重复的Set:存储的顺序是无序的、不可重复的Map:使用键值对存储,Key和Value都是无序的,其中Key不可重复,而Value可重复 2、ArrayList和LinkedList的区…

JavaEE简单实例——MyBatis的一对一映射的嵌套查询的简单介绍和基础配置

简单介绍: 在前一章我们介绍了关于MyBatis的多表查询的时候的对应关系,其中有三种对应关系,分别是一对一,一对多,多对多的关系。如果忘记了这三种方式的对应形式可以去前面看看,一定要记住这三种映射关系的…

项目重构,从零开始搭建一套新的后台管理系统

背景 应公司发展需求,我决定重构公司的后台管理系统,从提出需求建议到现在的实施,期间花了将近半个月的时间,决定把这些都记录下来。 之前的后台管理系统实在是为了实现功能而实现的,没有考虑到后期的扩展性&#xf…

逆风翻盘拿下感知实习offer,机会总是留给有准备的人

个人背景211本,985硕,本科是计算机科学与技术专业,研究生是自学计算机视觉方向,本科主要做C和python程序设计开发,java安卓开发,研究生主要做目标检测,现在在入门目标跟踪和3d目标检测。无论文&…

并发编程学习篇从0-1合集

一、synchronized 一、原子性、有序性、可见性 1.1 原子性 数据库的事务:ACID A:原子性-事务是一个最小的执行的单位,一次事务的多次操作要么都成功,要么都失败。 并发编程的原子性:一个或多个指令在CPU执行过程中…

用Python获取弹幕的两种方式(一种简单但量少,另一量大管饱)

前言 弹幕可以给观众一种“实时互动”的错觉,虽然不同弹幕的发送时间有所区别,但是其只会在视频中特定的一个时间点出现,因此在相同时刻发送的弹幕基本上也具有相同的主题,在参与评论时就会有与其他观众同时评论的错觉。 在国内…

怎么从零开始学黑客,黑客零基础怎么自学

很多朋友对成为黑客很感兴趣,很大原因是因为看到电影中黑客的情节觉的特别的酷,看到他们动动手指就能进入任何系统,还有很多走上黑客之路的朋友仅仅是因为自己的qq被盗了,或者游戏里的装备被别人偷了,想要自己盗回来&a…

听车企做开发朋友说,面试Framework 必问~

近期听在车企工作的朋友说,今年去他们公司面试的人比往年增长了30%左右,但实际面试达到标准的人屈指可数,大多都是从 Android 开发方向转过来的。 车企招聘要求有哪些? 每个车企因为业务部门的不同,他们的要求也会有…

Linux操作系统基础知识命令参数详解

Linux操作系统 RAID分组 RAID JBOD RAID JBOD的意思是Just a Bunch Of Disks,是将多块硬盘串联起来组成一个大的存储设备,从某种意义上说这种类型不被算作RAID,在维基百科里JBOD同时也被归入非RAID架构。RAID JBOD将所有的磁盘串联成一个单…

保持超低温环境新方法:功耗降至十分之一!

(图片来源:网络)量子比特是量子计算机的主要构建部分,然而热量会导致量子比特容易出错,因此量子系统通常保存在超低温稀释制冷机内,可以将温度保持在绝对零度(−273.15℃)以上。但是…

如何使评论具有可操作性?取悦客户的指南

永远不要低估承认的力量。 当品牌与客户互动时,认可会带来更好的关系和更好的沟通。与买家和客户建立更多的个人联系意味着品牌需要证明他们支持他们的产品和客户。评论是利用客户分享他们的故事的那些时刻的绝佳机会。 为什么评论在 SaaS 中至关重要 在 B2B 软件的…

【python学习笔记】:如何去除字符串中空格

在输入数据时,很有可能会无意中输入多余的空格,或者在一些场景中,字符串前后不允许出现空格和特殊字符,此时就需要去除字符串中的空格和特殊字符。 【注意:这里的特殊字符,指的是制表符(\t&…

ASEMI高压MOS管ASE65R330参数,ASE65R330图片

编辑-Z ASEMI高压MOS管ASE65R330参数: 型号:ASE65R330 漏极-源极电压(VDS):650V 栅源电压(VGS):20V 漏极电流(ID):12.5A 功耗(P…

57 - 深入解析任务调度

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 问题1.1 思考1.2 实例分析:问题分析及解决2. 深入讨论2.1 任务调度的定义2.2 关于调度算法的分类2.3 什么时候进行任务调度2.4 任务的分类2.5 关于优先级调度2.6 问题2.7 调度算法的终极目标2.8 课后扩展1. 问题 系统…

在windows11上安装openssh服务端并修改端口号

在windows11上安装openssh服务端并修改端口号 目录1.软件下载地址2.修改端口3.启动ssh原文链接:https://blog.csdn.net/qq_62129885/article/details/1268467751.软件下载地址 Release v9.2.0.0p1-Beta PowerShell/Win32-OpenSSH (github.com) https://github.co…

浅谈智能电力运维管理系统在物业小区的应用分析

安科瑞 李亚俊 0引言 由于部分住宅小区存在电力设施纸质档案破损缺失、产权分界不清、查找故障点所在箱变(箱式变电站,下同)位置困难或小区出入口路径不明等情况,影响了抢修效率。为此,国网辽宁沈阳市沈北新区供电公…

Nacos Ignore the empty nacos configuration and get it based on dataId

1.配置错误 dataId问题 启动日志: 使用properties格式的文件: Ignore the empty nacos configuration and get it based on dataId[xxx-server] & group[DEFAULT_GROUP] Ignore the empty nacos configuration and get it based on dataId[xxx-s…

python 自动化测试 pytest 的使用

pytest 是一款以python为开发语言的第三方测试,主要特点如下: 比自带的 unittest 更简洁高效,兼容 unittest框架 支持参数化 可以更精确的控制要测试的测试用例 丰富的插件,已有300多个各种各样的插件,也可自定义扩…

【JDK8新特性之Stream流-Stream结果收集案例实操】

一.JDK8新特性之Stream流-Stream结果收集以及案例实操 二.Stream结果收集(collect函数)-实例实操 2.1 结果收集到集合中 /*** Stream将结果收集到集合中以及具体的实现 collect*/Testpublic void test01(){// 收集到List中 接口List<Integer> list Stream.of(1, 2, 3…