刚接触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选项,指定文件输出目录。
首先,我们查看crypto-config目录:
可以看到,crypto-config作为根目录,其包含了两个子目录,即ordererOrganizations和peerOrganizations,分别存放了两种节点的证书和密钥文件。展开文件目录:
这里只是再一次进行了目录分层,一个order组织,两个peer组织,刚好对应了上面crypto-config.yaml里的配置信息。继续展开文件目录:
这一层,我们看到每一个组织下面都有ca、msp、tlsca、users这几个文件目录,我们重点解读一下:
-
ca目录:存放组织私钥和根证书;
-
msp目录:存放ca目录下的证书、tlsca目录下证书、users目录下的Admin用户的证书;
-
tlsca目录:存放组织间进行通信时使用的证书;
-
users目录:存放组织用户的证书和私钥,需要注意的是,这里面肯定会存在一个Admin用户;
其详细结构如下图:
cryptogen工具默认使用EC算法,生成ca、tlsca中的私钥文件,证书为自签名。msp目录存放了组织身份信息,包括根证书、TLS和管理员用户的证书副本,这些证书与ca、tlsca、users目录下的文件完全相同,其为fabric身份验证提供了一个统一的证书入口。users目录存放属于该组织的用户实体,admin作为管理员用户,包括了msp证书和tls证书,其中,keystore存放了用户的身份私钥。而signcerts则存放了由组织根证书签名的管理员身份验证证书,且只有将其放到节点的msp/admincerts下才能被相应节点认可。当配置文件中EnableNodeOUs为true时,msp目录下会生成一个config.yaml,记录更细粒度的签名策略。
tls目录下存放了通信相关的证书和私钥,包括组织的根证书ca、管理员的私钥以及被根证书签名过的身份验证证书。当然,users目录下可能存在除admin外的多个用户,其结构与admin完全相同。
至于orderers和peers文件目录,则包含了对应组织下的节点文件,我们以peers为例进一步查看:
可以看到,和上述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