参考
1.fabric-ca安装
2.Fabric-CA 架构及安装
3.Fabric-Ca使用
4.Fabric CA的部署与使用
5.HyperLedger Fabric中Fabric-CA的使用
6.Fabric CA源码和镜像编译
sudo gedit /etc/profile
7.Fabric-CA 架构及安装
8.Fabric CA的部署与使用
【GO】详解GOROOT和GOPATH
go语言的工作空间和GOPATH环境变量
待学习
Go Modules 终极入门
HyperLedger Fabric 1.4 生产环境使用ca生成msp和tls(12)
9-HyperLedger-Fabric原理-MSP详解(一)-MSP基础
Fanric CA是Hyperledger Fabric的证书办法机构(CA),是Fabric内一个可选的MemberService组件,对网络内各个实体的身份证书进行管理,主要功能如下:
1.负责Fabric网络内所有实体(Identity)身份的注册。
2.负责对数字证书的签发,包括ECerts(身份证书)、TCerts(交易证书)。
3.负责证书的续签或吊销。
1. 环境要求
(1)安装Golang1.9或以上版本并设置GOPATH环境变量
~~我的环境变量的配置
export GOROOT=/usr/local/go
export GOPATH=/home/lijiangtao/go
export GOBIN=/usr/local/go/bin
(2)安装libtool与libltdl-dev依赖包
$ sudo apt install libtool libltdl-dev
2.安装服务端与客户端
方式一:安装服务端与客户端二进制命令到$GOPATH/bin目录下(用此方法没有成功)
$ go get -u github.com/hyperledger/fabric-ca/cmd/...
命令执行完后,会自动在$GOPATH/bin目录下产生两个可执行文件:
fabric-ca-client,fabric-ca-server
设置环境变量,以便于在任何路径下都可以直接使用两个命令
export PATH=$PATH:$GOPATH/bin
go get -u github.com/hyperledger/fabric-ca/cmd/… #注意,该命令需使用root权限执行(sudo -i登录管理员权限),其中相关配置文件需在.profile文件中重新配置
方式二:从源码编译安装(操作成功)
首先在系统中建立以下路径
mkdir -p $GOPATH/src/github.com/hyperledger/
$ cd $GOPATH/src/github.com/hyperledger/
从Github上面将Fabric-Ca仓库克隆到本地:
$ git clone https://github.com/hyperledger/fabric-ca.git
进入到fabric-ca文件夹
$ cd fabric-ca
使用make命令编译,这一步编译时出现如下错误:Fabric_Error笔记(3)
$ make fabric-ca-server
$ make fabric-ca-client
自动在当前的fabric-ca目录下生成bin目录,目录中包含fabric-ca-client与fabric-ca-server两个可执行文件
设置环境变量
执行命令:$ sudo vi /etc/profile
或sudo gedit /etc/profile
,进入编辑界面,在export PATH中加入/home/lijiangtao/go/src/github.com/hyperledger/fabric-ca/bin,如下图
加载环境变量
执行命令$ source /etc/profile
(1)确定Fabric CA服务器的主目录
返回HOME目录下,创建一个名为fabric-ca的目录并进入该目录
$ cd ~
$ mkdir fabric-ca && cd fabric-ca
创建该目录的目的是将其作为Fabric CA服务器的主目录。默认服务器主目录为“./”。
(2)初始化Fabric CA
进入fabric-ca文件夹中(必须进入fabric-ca目录下)
$ fabric-ca-server init -b admin:pass #此命令会在fabric-ca文件夹中生成几个相关文件
(3)或者使用如下命令:快速启动并初始化fabric-ca-server服务
$ cd ./fabric-ca #必须进入fabric-ca目录下
$ fabric-ca-server start -b admin:pass
fabric-ca-client命令可以与服务端进行交互,如下子命令
affiliation:管理分支机构
certificate:管理证书
enroll:认证一个账号
gencrl:撤销证书(生成一个CRL:Certificate Revocation Lists,证书撤销表)
gencsr:创建证书签名(生成一个CSR:Certificate Signing Request,认证签名请求)
getcainfo:获取CA证书
identity:管理账号
reenroll:重新认证账号
register:注册新账户
revoke:撤销账号
version:显示版本信息
新打开一个终端(随意路径下),执行如下命令:
$ export PATH=$PATH:$GOPATH/bin #设置fabric-ca-client所在路径
$ export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin #设置Fabrci CA客户端主目录
$ fabric-ca-client enroll -u http://admin:adminpw@localhost:7054 #调用在7054端口运行的Fabric CA服务器来注册ID为admin且密码为pass的标识
注:用户名与密码不匹配,
运行注册命令会产生如下错误Error: Response from server: Error Code: 20 - Authentication failure
详见Fabric_Error笔记(4)
上面命令执行完成后,会在fabric-ca文件夹中产生clients文件夹,生成的文件结构如下
fabric-ca/clients/
└── admin
├── fabric-ca-client-config.yaml
└── msp
├── cacerts
│ └── localhost-7054.pem #CA服务器的根证书,只不过换了一个名字
├── IssuerPublicKey
├── IssuerRevocationPublicKey
├── keystore
│ ├── 40baaa1f2151319d26c5e956b29d6e9c62784283ebf53a73cef8bc1cc10bb395_sk #当前用户的秘钥信息
│ ├── 80c29e496c926d7c6841422476b5960ea339de17b83cca46454a864f06209c66_sk
│ ├── 8f8af6bc5da59225d1019dcf98d868b01f58dddec90406f2ebd9fae921523d09_sk
│ └── bc2cb82a5c9b425afda7dbf1131d4fca5e4f63439345ea4ae6271f48df1db858_sk
├── signcerts
│ └── cert.pem #当前用户的证书
└── user
6 directories, 9 files
注册成功的用户可以使用register命令发起登记请求
设置登记请求的目的是授权注册表示类型适当的权限
Fabric CA服务器会在注册用户登记期间进行3次授权检查。
使用一个管理员标识的凭据注册登记ID为admin2的新用户,从属关系为org1.department1,名为hf.Revoker的属性值为true,以及名为admin的属性值为true。:ecert后缀表示默认情况下,admin属性及其值将插入用户的注册证书中,实现访问控制决策。
$ export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
$ fabric-ca-client register \
--id.name admin2 \
--id.affiliation org1.department1 \
--id.attrs 'hf.Revoker=true,admin=true:ecert' \
--id.secret pass2 #添加密码
1 登记节点
$ export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
$ fabric-ca-client register \
--id.name peer1 \
--id.type peer \
--id.affiliation org1.department1 \
--id.secret peer1pw
2 注册节点
$ export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1
$ fabric-ca-client enroll \
-u http://peer1:peer1pw@localhost:7054 \
-M $FABRIC_CA_CLIENT_HOME/msp
命令执行成功会在$Fabric_CA_CLIENT_HOME目录下生成指定的MSP目录,在此目录下生成MSP的私钥和证书。
1.getcainfo命令
2.reenroll命令
3.revoke命令
(1)AKI是公钥标识号,代表签发该证书机构的身份
通过下面命令查看根证书的AKI与序列号信息
$ openssl x509 -in $FABRIC_CA_CLIENT_HOME/msp/signcerts/cert.pem -text -noout
命令执行后,终端输出如下类似内容:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: #序列号
22:fd:45:a7:61:10:9b:53:53:9d:f4:43:bd:3d:6b:4f:33:d0:1e:5e
Signature Algorithm: ecdsa-with-SHA256
Issuer: C = US, ST = North Carolina, O = Hyperledger, OU = Fabric, CN = fabric-ca-server
Validity
Not Before: Aug 30 06:59:00 2021 GMT
Not After : Aug 30 08:46:00 2022 GMT
Subject: C = US, ST = North Carolina, O = Hyperledger, OU = org1 + OU = peer + OU = department1, CN = peer1
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:54:fe:2f:9a:4e:39:e9:e3:58:a4:09:a7:1d:6d:
dc:70:8b:5b:d2:97:19:30:70:a8:12:98:d4:c7:8b:
a3:cf:5c:00:96:e5:69:e4:91:55:e1:90:34:92:32:
6e:14:e2:8a:1f:0c:e9:c1:4b:19:bc:04:f2:13:7b:
8d:13:2f:2c:03
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Key Identifier: #keyid后面的内容就是AKI
09:9B:8E:5C:F9:5C:C4:61:9A:CE:5A:EE:57:28:AB:3B:CE:42:88:CF
X509v3 Authority Key Identifier:
keyid:F0:32:09:F5:29:32:44:23:DF:7E:C5:48:8D:3E:8D:26:58:D8:FC:9E
X509v3 Subject Alternative Name:
DNS:lijiangtao-Legion-Y7000P-2019
1.2.3.4.5.6.7.8.1:
{"attrs":{"hf.Affiliation":"org1.department1","hf.EnrollmentID":"peer1","hf.Type":"peer"}}
Signature Algorithm: ecdsa-with-SHA256
30:44:02:20:1a:fc:ba:c3:85:67:c7:ee:04:9f:93:b2:77:16:
39:7a:6a:4c:35:98:88:08:c8:b0:9e:ee:f6:97:1f:df:6b:18:
02:20:23:7f:9d:b8:7f:8e:cf:12:1e:ca:cd:36:21:05:1d:90:
b0:ad:e4:e7:5a:e0:f7:37:66:41:fc:3b:49:8a:5c:22
(2)单独获取AKI
$ openssl x509 -in $FABRIC_CA_CLIENT_HOME/msp/signcerts/cert.pem -text -noout | awk '/keyid/ {gsub (/ *keyid:|:/,"",$1);print tolower($0)}'
终端输出内容:f03209f529324423df7ec5488d3e8d2658d8fc9e
(3)单独获取序列号:
$ openssl x509 -in $FABRIC_CA_CLIENT_HOME/msp/signcerts/cert.pem -serial -noout | cut -d "=" -f 2
终端输出内容:22FD45A761109B53539DF443BD3D6B4F33D01E5E