使用fabric bccsp产生基于国密算法的证书

Fabric-CA主要是为了实现对加入联盟链的成员的身份控制以及数据生成保管。

CA即Certificate authority,证书授权者,就是颁发证书的机构。

CA考虑通过Fabric-CA来做搭建,改造CA主要改动如下几个包:
•Lib:主要是接口的实现,主要在解析申请证书请求以及签发证书流程要替换为国密算法;
•Util:该包数据工具类,主要在证书的编解码等操作中扩展国密算法;
•Vendor:因为CA沿用Fabric中的BCCSP套件,所以需要替换对Fabric的包的引用,提供对国密算法的支持。

使用fabric bccsp产生基于国密算法的证书_第1张图片

下面尝试使用国密算法改造过的fabric bccsp来产生证书。

改动配置文件

lib/util.go
使用fabric bccsp产生基于国密算法的证书_第2张图片
util/configurebccsp.go

在这里插入图片描述
使用fabric bccsp产生基于国密算法的证书_第3张图片
lib/ca.go
使用fabric bccsp产生基于国密算法的证书_第4张图片
使用fabric bccsp产生基于国密算法的证书_第5张图片
lib/gmca.go
使用fabric bccsp产生基于国密算法的证书_第6张图片
使用fabric bccsp产生基于国密算法的证书_第7张图片
使用fabric bccsp产生基于国密算法的证书_第8张图片
使用fabric bccsp产生基于国密算法的证书_第9张图片
使用fabric bccsp产生基于国密算法的证书_第10张图片
另外,依赖的库文件都需要换成国密算法的库文件。

生成证书

采用cryptogen工具来生成证书:
cryptogen工具会读取 crypto-config.yaml中的所有配置,把内容解析到名为 OrdererOrgs和 PeerOrgs的数据结构中,其实这两个对应的就是crypto-config.yaml 中的两个根节点或是一级节点(这里是把yaml看成和xml一样的文件格式),这两个的类型为OrgSpec,类型的定义如下:

type OrgSpec struct {
    Name          string       `yaml:"Name"`
    Domain        string       `yaml:"Domain"`
    EnableNodeOUs bool         `yaml:"EnableNodeOUs"`
    CA            NodeSpec     `yaml:"CA"`
    Template      NodeTemplate `yaml:"Template"`
    Specs         []NodeSpec   `yaml:"Specs"`
    Users         UsersSpec    `yaml:"Users"`
}
//生成证书工具在目录e2e_cli目录下
cd examples/e2e_cli

//调用e2e的工具生成证书
./generateArtifacts.sh

注:命令执行成功后,会在e2e_cli目录下产生文件夹crypto-config。
在这个MSP中配置了两个组织(org1/org2)
每个组织下有两个peer节点(peer0/peer1):排序服务节点/CA节点

在这里插入图片描述
以peerOrganizations组织树为例,打开该目录,可以看到如下两个组织的证数目录:
在这里插入图片描述
每个组织都会生成单独的根证书。

以其中一个组织的目录为例,其结构用树形来表示为:
使用fabric bccsp产生基于国密算法的证书_第11张图片

在这里插入图片描述
ca :存放了组织的根证书和对应的私钥文件,采用的是SM2算法,证数为自签名(自已签发自己的公钥)。组织内的实体将基于该证数作为证数根。

密钥
在这里插入图片描述
根CA证书
在这里插入图片描述

msp:存放代表该组织的身份信息。
使用fabric bccsp产生基于国密算法的证书_第12张图片
被根证书签名的组织管理员的身份验证证书。
在这里插入图片描述
组织的根CA证书,和ca目录下的文件相同。
在这里插入图片描述
用于TLS的根CA证书,证数为自签名。
在这里插入图片描述

peers:存放该组织下所有peer节点的证书:
·msp:
使用fabric bccsp产生基于国密算法的证书_第13张图片
admincerts:组织管理员的身份验证证书,用于验证交易签名者是否为管理员身份
在这里插入图片描述
cacerts:存放组织的根证书。
在这里插入图片描述
keystore:本节点的身份私钥,用来签名。
在这里插入图片描述
signcerts: 验证本节点签名的证书,被组织根证书签名。
在这里插入图片描述
tlscacerts:TLS连接用的身份证书,即组织TLS证书。
在这里插入图片描述

·tls:存放tls相关的证书和私钥。
在这里插入图片描述
ca.crt:组织的根证书。

server.crt:验证本节点签名的证书,被组织根证书签名。

server.key:本节点的身份私钥,用来签名。

tlsca:TLS的中间CA证书和密钥:
在这里插入图片描述
密钥
在这里插入图片描述
证书
在这里插入图片描述

users:存放属于该组织的用户实体。一般包含一个管理员和一个普通成员:
使用fabric bccsp产生基于国密算法的证书_第14张图片
·msp:
使用fabric bccsp产生基于国密算法的证书_第15张图片
admincerts:MSP的管理员证书
在这里插入图片描述
cacerts:MSP的根CA证书
在这里插入图片描述
keystore:签名密钥
在这里插入图片描述
signcerts: 节点的签名证书
在这里插入图片描述
tlscacerts:TLS的根CA证书
在这里插入图片描述

·tls:存放tls相关的证书和私钥。
在这里插入图片描述
ca.crt:可信的根CA证书

server.crt:用来进行TLS连接的证书

server.key:用来进行TLS连接的密钥

查看证书

openssl x509 -in ca-cert.pem -noout -text

使用fabric bccsp产生基于国密算法的证书_第16张图片

验证证书

验证节点的证书:
使用CA的公钥对server.crt内含的密文进行解密(使用算法为SM2),然后将得到的明文进行hash(使用算法为SM3),得到摘要h1。
将明文用SM3算法进行哈希,然后将得到的摘要h2使用节点的私钥server.key进行加密,再用server.crt内含的公钥进行解密。如果h1与h2相同,则证明证书有效。

在这里插入图片描述
结果:
在这里插入图片描述

你可能感兴趣的:(使用fabric bccsp产生基于国密算法的证书)