fabric证书体系

刚接触Hyperledger fabric各种证书往往使人迷惑不解,证书是怎样生成的,证书之间的关联关系是怎样的,本篇文章将带大家进行解读。

Fabric的证书体系是根据 PKI(Public Key Infrastructure) 规范生成的一组证书和秘钥文件,用来验证用户和组织的身份信息。Hyperledge fabric中生成证书有两种方式:使用Cryptogen和CA Server,本文讲义Cryptogen为例介绍fabric的证书体系。

cryptogen模块是创建Fabric账号和证书的方式之一,可以通过配置文件生成Fabric运行所需要的相关账号和证书文件,在配置文件中需要指定每个组织包含的用户数和节点数,下图cryptogen工具的配置文件(crypto-config.yaml):

 一般情况下,

  • Name和Domain必须填写,生成证书的时候,证书内会包含Name和Domain信息;

  • Specs和Template并不会冲突,其Count共同决定了节点数量;

cryptogen工具使用上述配置文件,在当前目录下创建一个crypto-config 目录,并将生成的私钥和相关证书放入其中。当然,你也可以添加–output选项,指定文件输出目录。

fabric证书体系

首先,我们查看crypto-config目录:

fabric证书体系

可以看到,crypto-config作为根目录,其包含了两个子目录,即ordererOrganizations和peerOrganizations,分别存放了两种节点的证书和密钥文件。展开文件目录:

fabric证书体系

这里只是再一次进行了目录分层,一个order组织,两个peer组织,刚好对应了上面crypto-config.yaml里的配置信息。继续展开文件目录:

fabric证书体系

这一层,我们看到每一个组织下面都有ca、msp、tlsca、users这几个文件目录,我们重点解读一下:

  • ca目录:存放组织私钥和根证书;

  • msp目录:存放ca目录下的证书、tlsca目录下证书、users目录下的Admin用户的证书;

  • tlsca目录:存放组织间进行通信时使用的证书;

  • users目录:存放组织用户的证书和私钥,需要注意的是,这里面肯定会存在一个Admin用户;

其详细结构如下图:

fabric证书体系

cryptogen工具默认使用EC算法,生成ca、tlsca中的私钥文件,证书为自签名。msp目录存放了组织身份信息,包括根证书、TLS和管理员用户的证书副本,这些证书与ca、tlsca、users目录下的文件完全相同,其为fabric身份验证提供了一个统一的证书入口。users目录存放属于该组织的用户实体,admin作为管理员用户,包括了msp证书和tls证书,其中,keystore存放了用户的身份私钥。而signcerts则存放了由组织根证书签名的管理员身份验证证书,且只有将其放到节点的msp/admincerts下才能被相应节点认可。当配置文件中EnableNodeOUs为true时,msp目录下会生成一个config.yaml,记录更细粒度的签名策略。

fabric证书体系

tls目录下存放了通信相关的证书和私钥,包括组织的根证书ca、管理员的私钥以及被根证书签名过的身份验证证书。当然,users目录下可能存在除admin外的多个用户,其结构与admin完全相同。

至于orderers和peers文件目录,则包含了对应组织下的节点文件,我们以peers为例进一步查看:

fabric证书体系

可以看到,和上述users类似,peers下每一个节点都具有相同的目录结构,即msp和tls,存放了对应节点的私钥和签名证书。

至此,我们梳理了Hyperledger fabric使用cryptogen工具生成的证书体系,在任意一个组织内部,所有的admincerts、cacerts和tlscacerts都是一样的。各实体的私钥文件和签名证书存储在其对应的msp目录下,即对于peer、orderer及users来说,msp/keystore存放的是私钥文件,msp/signcerts存放的是被组织根证书签名过的验证证书,了解fabric的证书目录,才能帮助我们更好的掌握其证书体系。

文章作者:李晓笛&栗石

 手绘插画:岳    媛         

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33374.html

Like (0)
EBCloud的头像EBCloud
Previous 2024年4月2日 下午3:28
Next 2024年4月2日 下午3:28

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注