深度学习
fabric-ca-client命令可以跟服务端进行交互,包括enroll、getcacert、reenroll、register、revoke五个子命令,主要功能如下:
·enroll:登录获取ECert;
·getcacert:获取CA服务的证书链;
·reenroll:再次登录;
·register:注册用户实体;
·revoke:吊销签发的实体证书。
这些子命令在实现上都是通过服务端的RESTful接口来进行操作的,并且都支持一系列全局命令参数。
11.7.1 全局命令参数
包括通用参数、证书签名请求参数、Enroll、注册、吊销、TLS等多个方面的参数。
1.通用参数
通用参数都比较简单,所有命令都可以使用,如表11-6所示。
表11-6 通用参数
2.证书签名请求参数
证书签名请求(certificate signing request)文件十分重要,在enroll和reenroll相关过程需要提供给服务端,如表11-7所示。
3.登记相关参数
登记相关参数包括登记证书代表的主机列表、硬件安全模块操作标签、颁发证书的Profile等,如表11-8所示。
表11-8 登记相关参数
4.身份实体相关参数
身份实体相关参数主要应用于注册环节和登记,如表11-9所示。
表11-9 身份实体相关参数
5.吊销证书相关参数
吊销证书相关参数用于吊销证书操作环节,如表11-10所示。
表11-10 吊销证书相关参数
其中,证书颁发者的公钥标识号(AKI)代表了对该证书进行签发机构的身份,一般为上级证书的证书使用者密钥标识符(Subject Key Identifier)。
序列号信息则由CA维护,用来追踪到该证书,当该证书被撤销时,序列号会被放入证书撤销列表中。
AKI和序列号可以通过如下命令查看证书内容来获得:
$ openssl x509 -in msp/signcerts/cert.pem -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: // 下面的字符串就是序列号
0e:ff:93:d8:eb:9f:03:d6:39:63:d7:50:e9:ed:27:60:69:5d:35:e1
...
X509v3 extensions:
...
X509v3 Authority Key Identifier: // keyid后的字符串就是AKI
keyid:07:25:7E:6E:99:71:1C:40:32:1E:2C:E4:EE:E7:18:14:03:F3:3B:62
Signature Algorithm: ecdsa-with-SHA256
...
也可以通过如下命令来快速提取AKI和序列号:
$ openssl x509 -in msp/signcerts/cert.pem -text -noout | awk '/keyid/ {gsub
(/ *keyid:|:/,"",$1);print tolower($0)}'
07257e6e99711c40321e2ce4eee7181403f33b62
$ openssl x509 -in msp/signcerts/cert.pem -serial -noout | cut -d "=" -f 2
0EFF93D8EB9F03D63963D750E9ED2760695D35E1
6.TLS相关参数
TLS连接相关配置参数,如表11-11所示。
表11-11 TLS相关参数
11.7.2 enroll命令
命令格式为fabric-ca-client enroll-u http://user:userpw@serverAddr:serverPort 。该命令会向服务端申请签发ECert证书。
如采用下面命令获取证书文件保存到本地:
$ fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
[INFO] User provided config file: /.fabric-ca-client/fabric-ca-client-config.yaml
[INFO] Configuration file location: /.fabric-ca-client/fabric-ca-client-config.yaml
[INFO] generating key: &{A:ecdsa S:256}
[INFO] encoded CSR
[INFO] Stored client certificate at /.fabric-ca-client/msp/signcerts/cert.pem
[INFO] Stored CA certificate chain at /.fabric-ca-client/msp/cacerts/localhost-
7054.pem
该命令会在默认的主配置目录(此处为/.fabric-ca-client)下创建msp目录,并存放证书相关文件:
msp
├── cacerts
│ └── localhost-7054.pem
├── keystore
│ └── 5515333745cdd8cca6bcb9e448129528665574a0311393e27140e0b58bdc2929_sk
└── signcerts
└── cert.pem
其中cacerts目录下存放有服务端的证书,signcerts目录下存放有服务端签发的代表客户端身份的证书,keystore目录下的是对应客户端签名证书的私钥文件。
具体实现过程也十分简单。首先利用本地配置信息(主要是csr字段下信息)、生成的私钥和证书请求结构,构建EnrollmentRequestNet结构,之后通过RESTful接口/enroll发送给服务端。
EnrollmentRequestNet结构中将包括如下信息:
·CAName:服务的实例名称;
·SignRequest信息:
·Hosts:代表的主机列表;
·Request:CSR请求内容,包括通用名、名称、主机、生成私钥算法和大小、CA配置和序列号等信息;
·Subject:所签发对象的主体;
·Profile:服务端签发时采用的Profile;
·CRLOverride:覆盖撤销列表;
·Label:HSM操作中的标签;
·Serial:序列号信息,会出现在证书的DN字段中;
·Extensions:证书扩展域。
服务器返回消息包含有EnrollmentResponse结构信息,其中的数据有:
·Identity:代表所签发的ECert证书等信息;
·ServerInfo:服务器的信息,包括CAName、证书链信息。
客户端利用收到的EnrollmentResponse结构解析出相关的文件内容,并保存到本地。
11.7.3 getcacert命令
命令格式为fabric-ca-client getcacert-u http://serverAddr:serverPort -M<MSP-directory>[flags]。该命令会向服务端申请根证书信息。
例如采用下面的命令获取服务端证书文件并保存到本地主配置目录的msp/cacerts路径下:
$ fabric-ca-client getcacert -u http://admin:adminpw@localhost:7054
[INFO] Stored CA certificate chain at /.fabric-ca-client/msp/cacerts/localhost-
7054.pem
实现上,客户端封装了GetCAInfoRequest结构,其中包括CAName信息,发送到服务端的/cainfo 接口。服务端收到请求后返回GetServerInfoResponse结构,其中包括CAName和CAChain数据。客户端将收到的证书链 (CAChain)的第一个证书写到msp/cacerts路径下,命名为“服务器主机名-CA实例名.pem”。其他证书写到msp /intermediatecerts路径下。
11.7.4 reenroll命令
命令格式为fabric-ca-client reenroll[flags]。会利用本地配置信息再次执行enroll过程,生成新的签名证书材料。
执行过程如下所示,与enroll过程类似,获取新的证书文件:
# fabric-ca-client reenroll
[INFO] User provided config file: /.fabric-ca-client/fabric-ca-client-config.yaml
[INFO] Configuration file location: /.fabric-ca-client/fabric-ca-client-config.yaml
[INFO] generating key: &{A:ecdsa S:256}
[INFO] encoded CSR
[INFO] Stored client certificate at /.fabric-ca-client/msp/signcerts/cert.pem
[INFO] Stored CA certificate chain at /.fabric-ca-client/msp/cacerts/localhost-
7054.pem
实现上,客户端首先要构造ReenrollmentRequest结构。其中包括:
·Label:HSM过程相关的标签;
·Profile:服务端签发采用的Profile;
·CSR:证书申请请求相关信息,包括通用名、名称、主机、生成私钥算法和大小、CA配置和序列号等信息;
·CAName:CA服务实例名称。
请求发送到服务端的/reenroll接口,服务端处理后返回EnrollmentResponse结构信息。客户端利用收到的EnrollmentResponse结构解析出相关的证书文件内容,并保存到本地。
11.7.5 register命令
命令格式为fabric-ca-client register[flags]。注册新的用户实体身份。
执行注册新用户实体的客户端必须已经通过登记认证,并且拥有足够的权限(所注册用户的hf.Registrar.Roles和affiliation都不能超出调用者属性)来进行注册。
例如通过如下命令来注册新的用户new_user,注册成功后系统会返回用来登记的密码:
$ fabric-ca-client register --id.name new_user --id.type user --id.affiliation
org1.department1 --id.attr hf.Revoker=true
User provided config file: /.fabric-ca-client/fabric-ca-client-config.yaml
Configuration file location: /.fabric-ca-client/fabric-ca-client-config.yaml
Password: MzklQbeynSqa
当然,也可以通过--id.secret new_user_password来指定登记的密码。
实现过程:首先客户端构造RegistrationRequest结构发送到服务器/register接口。
RegistrationRequest结构包括:
·Name:实体名称;
·Type:实体类型,包括peer、app、user等;
·Secret:实体的登记密码,如果不提供,则服务端会自行生成随机密码;
·MaxEnrollment:该实体最多重复登记次数;
·Affiliation:实体所属机构;
·Attributes:实体的属性信息;
·CAName:CA服务实例名称。
服务端处理通过后,返回RegistrationResponse结构,其中只包括Secret信息。
11.7.6 revoke命令
命令格式为fabric-ca-client revoke[flags]。
revoke命令会吊销指定的证书或者指定实体相关的所有证书。执行revoke命令的客户端身份必须拥有足够的权限(hf.Revoker为true,并且被吊销者机构不能超出吊销者机构的范围)。
例如,通过如下命令吊销用户new_user,并通过-r指定原因:
$ fabric-ca-client revoke -e "new_user" -r "affiliationchange"
[INFO] User provided config file: /.fabric-ca-client/fabric-ca-client-config.yaml
[INFO] Configuration file location: /.fabric-ca-client/fabric-ca-client-config.yaml
Revocation was successful
实现上也是类似的过程,客户端构造RevocationRequest结构发送到服务器/revoke接口。
RevocationRequest结构包括:
·Name:所吊销实体名称,如不提供,则通过序列号和AKI来指定吊销某个证书;
·Serial:所吊销证书的序列号;
·AKI:所吊销证书的颁发者的公钥标识符;
·Reason:吊销的原因;
·CAName:CA服务实例名称。
服务端进行吊销,不返回内容。其中,吊销原因是枚举类型,遵循rfc5280规范:《InternetX.509 Public Key Infrastructure Certificate and Certificate Revocation List(CRL)Profile》。具体类型在http://godoc.org/golang.org/x/crypto/ocsp 中定义,包括如下合法取值:
const (
Unspecified = iota
KeyCompromise = iota
CACompromise = iota
AffiliationChanged = iota
Superseded = iota
CessationOfOperation = iota
CertificateHold = iota
RemoveFromCRL = iota
PrivilegeWithdrawn = iota
AACompromise = iota
)
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=909
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区