Fabric-ca: server init函数——initEnrollmentSigner

该博客详细介绍了如何从证书文件中初始化登记签名人。首先,通过读取PEM证书文件并将其转换为X509格式。接着,从X509证书中提取公钥信息,然后结合加密服务提供者(BCCSP)生成私钥和BCCSPSigner。最后,将BCCSPSigner转换为LocalSigner,形成最终的EnrollmentSigner。整个过程涉及证书解析、密钥管理和签名逻辑的构建。
摘要由CSDN通过智能技术生成

enroll: 登记

register: 注册

登记签名人初始化逻辑

// Initialize the enrollment signer
err = ca.initEnrollmentSigner()

主要方法

ca.enrollSigner, err = util.BccspBackedSigner(c.CA.Certfile, c.CA.Keyfile, policy, ca.csp)

 

BccspBackedSigner方法

func BccspBackedSigner(caFile, keyFile string, policy *config.Signing, csp bccsp.BCCSP) (signer.Signer, error) {
	_, cspSigner, parsedCa, err := GetSignerFromCertFile(caFile, csp)
	if err != nil {
		// Fallback: attempt to read out of keyFile and import
		log.Debugf("No key found in BCCSP keystore, attempting fallback")
		var key bccsp.Key
		var signer crypto.Signer

		key, err = ImportBCCSPKeyFromPEM(keyFile, csp, false)
		if err != nil {
			return nil, errors.WithMessage(err, fmt.Sprintf("Could not find the private key in BCCSP keystore nor in keyfile '%s'", keyFile))
		}

		signer, err = cspsigner.New(csp, key)
		if err != nil {
			return nil, errors.WithMessage(err, "Failed initializing CryptoSigner")
		}
		cspSigner = signer
	}

	signer, err := local.NewSigner(cspSigner, parsedCa, signer.DefaultSigAlgo(cspSigner), policy)
	if err != nil {
		return nil, errors.Wrap(err, "Failed to create new signer")
	}
	return signer, nil
}

(1) 将PEM证书文件转换为x509格式

_, cspSigner, parsedCa, err := GetSignerFromCertFile(caFile, csp)

...

certBytes, err := ioutil.ReadFile(certFile)
parsedCa, err := helpers.ParseCertificatePEM(certBytes)

 

(2) 从X509证书中获取签名人

// Get the signer from the cert
key, cspSigner, err := GetSignerFromCert(parsedCa, csp)

(3) 由加密服务签名人 转换为本地签名人, 和bccsp的那一部分相同,cspSigner 都转换为了 本地的signer

signer, err := local.NewSigner(cspSigner, parsedCa, signer.DefaultSigAlgo(cspSigner), policy)

 

 

总结一下:

获取签名人的要素: 证书文件, 加密服务提供者(bccsp)

证书文件(ca-cert.pem)-->解析为符合X509格式的结构体

---> 从X509中获取公钥 --> 由公钥及bccsp共同生成私钥---> 由私钥和bccsp共同生成bccspSigner ---> 由bccspSigner生成LocalSigner

--> 即为最后的EnrollmentSigner。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值