深度学习
在Gossip网络中,每个节点都有超级账本网络认可的MSP(Membership Service Provider)颁发的证书(身份,Identity),从证书计算哈希值导出(目前的实现是直接用Endpoint转换而来的)的一个标识符称为节点 的PKI-ID。
身份管理模块管理节点标识符和证书之间的映射,在内部维护了以PKI-ID为键、证书为值的映射表 pkiID2Cert,可以通过PKI-ID获取节点的证书,也可以更新节点的证书。同时还内置了MCS(MessageCryptoService)模 块,它可以对消息进行签名和验证。更新节点证书的时候也会通过MCS模块验证证书是否有效,检查从证书导出的标识符是否和PKI-ID匹配。¤
在生产环境中,假设所有节点都是双向TLS部署的,TLS连接的双方都有一个有效的TLS证书。当节点和对端节点 第一次连接时,会有一个握手协议,这个协议验证它是否拥有TLS证书的私钥,因而在TLS会话中绑定成员身份。握手是相互的,过程比较简单,握手节点主动 发送给对端节点一条ConnEstablish消息,包含的内容有:
·节点TLS证书的哈希值;
·节点的PKI-ID;
·MSP身份证书。
然后,对端节点的处理过程是:
·接收发送过来的ConnEstablish消息;
·提取节点的TLS证书并计算哈希值;
·通过哈希值验证ConnEstablish的签名是否正确。
如果签名验证通过,还会检查PKI-ID是否在黑名单列表中,如果不在黑名单中,就信任这个节点。用PKI-ID 作为键值,保存证书到映射表pkiID2Cert中,后续可以验证这个节点发送消息的签名。同时还会用PKI-ID作为键值,创建一个连接并进行关联,并 将其保存在内存中。需要和这个节点通信的时候通过PKI-ID快速地找到连接并发送消息。发送的过程是把消息放到一个发送缓冲区中,由一个线程负责把发送 缓冲区中的数据发送出去。如果签名验证失败,节点拒绝这次连接。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=1079