区块链历经10余年的发展,基础技术框架逐渐完善,链上承载的业务越来越丰富,参与方越来越多。多方协作能否顺畅进行、业务摩擦能否得到有效解决、既往治理策略和实践能否满足日后高速发展的需求……行业关注的重点逐步聚焦到这些更具挑战性的难题上。
2021年1月,微众银行区块链在多年技术研究和应用实践的基础上,重磅发布了《面向区块链的多方协作治理框架》白皮书,即MCGF(Multilateral Collaborative Governance Framework)。作为区块链治理的参考架构,MCGF全面覆盖区块链治理的设计规范、参与角色、核心系统架构、功能流程及应用场景等领域。
区块链多方协作治理组件(WeBankBlockchain-Governance)MCGF框架的实做基础和原子性构件,可复用、可定制,由私钥管理组件(Governance-Key)、账户治理组件(Governance-Account)、权限治理组件(Governance-Authority)、证书管理组件(Governance-Cert)等子组件构成。它们嵌入和运行在整个MCGF大框架的各部分,宛如高速行驶的汽车上的车轮、齿轮、传动组、传感器,协同助力构建治理框架和提升开发效率。
我们通过系列文章,抽丝剥茧地解析每一个子组件的关键特性和使用方式。本篇文章是区块链多方协作治理组件系列文章的最后一篇,介绍证书管理组件(Governance-Cert),欢迎大家积极体验并将使用诉求或优化建议反馈给我们。
Governance-Cert介绍
CA(Certificate Authority)是互联网及企业级应用的重要安全基础支撑。CA是负责发放和管理数字证书的权威机构,且是交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
在联盟链中,多采用面向CA的准入机制,通过证书来验证身份信息,保证信息的保密性、可认证性、完整性和不可抵赖性。如FISCO BCOS使用X509协议的证书格式,支持任意多级的证书结构。
证书内容包括了证书版本号、序列号、证书的签名算法、消息摘要算法等生成信息;同时包括了证书的颁发者、有效期、使用者、公钥信息、SSL通信需要用到的密码套件等信息。区块链节点通过加载证书,在接受数据包时,根据证书规定的密码套件和其消息字段,对数据包中携带的证书进行验证。
但在现有的联盟链应用实践中,证书的管理仍存在着一定的痛点。例如:
在流程上,证书的签发缺乏统一的管理,且过程效率较低。当子证书签发时,需与根证书持有机构沟通后,才能将证书请求文件发送给对方机构,签发后再传回。
证书无法被有效托管,一旦丢失,无法找回。
集团或总部公司,需要统一管理和保存本机构内部的所有证书,但缺乏完整的工具组件。
……
为了提升证书签发和使用的效率,我们开发了WeBankBlockchain-Governance-Cert组件,该组件提供了证书生命周期管理的解决方案,规范证书签发流程,支持证书托管,支持多种签名算法,有效提升个人和企业用户的使用体验。
关键特性
覆盖证书的全生命周期
为了助力用户方便地使用证书,Governance-Cert提供了证书生成、证书托管、证书使用等一系列功能,覆盖了整个证书的生命周期,尽可能满足使用者的各项需求。
支持多种密钥和签名算法
不仅支持RSA,EC等密钥算法,还支持SM2等国密算法。
在签名算法方面,除了支持SHA256WITHRSA、SHA256WITHECDSA,还支持SM3WITHSM2等国密签名算法。
支持证书托管
支持将证书和子证书请求持久化在数据库中。同时,证书相关的私钥也会被安全保存。此外,提供了统一的平台,来对证书信息统一管理。最后,支持对证书进行多维度查询,并支持证书的多格式导出。
支持多级证书签发
证书可进行多级签发,可选择上级证书并请求签发,生成证书链,使用方便,操作便捷。
支持证书吊销、重置
支持对证书进行吊销、重置等操作。重置信息包括有效时间、证书用途等。
设计概要
Governance-Cert包含两个模块,cert-toolkit和cert-mgr。cert-toolkit作为证书生成工具,可作为独立工具包使用,cert-mgr则基于cert-toolkit工具包,更进一步提供了证书的托管能力,并支持证书的生命周期管理,统一规范了签发流程。
cert-toolkit工具包提供了证书签发的多种接口,包括根证书生成、子证书请求生成、子证书签发等接口,并提供多种入参方式,可按需调用。
证书签发的基本流程为:
构建证书元数据:包括签发人(Issuer)、地址、签发时间、有效期等,还包括证书持有者(Owner)基本信息、Owner 公钥等信息;
使用通用的 Hash 算法(如SHA-256)对证书元数据计算生成数字摘要;
使用 Issuer 的私钥对该数字摘要进行加密,生成一个加密的数字摘要,也就是Issuer的数字签名;
将数字签名附加到数字证书上,则成为一个签名完成的数字证书。
另外,在证书读写方面,cert-toolkit中提供了对证书crt和pfx格式文件的读写。在证书管理上,提供证书验证、吊销的接口。
cert-mgr借助cert-toolkit工具包和数据库,完成了对证书全生命周期的管理,其中通过数据库构建对应的存储模型来实现对证书的持久化和托管。存储模型包括证书表、子证书请求表和用户私钥表,表结构和关系如下:
其中证书表用来保存管理证书信息,包括签发用户、证书数据,颁发时间等信息。证书请求信息表保存了子证书的申请信息,包括申请用户、所有者数据等信息。用户表则用来保存用户ID和私钥等信息。上述模型实现了对证书的托管和生命周期的管理。
应用场景
根证书管理
链上节点证书的签发统一由Governance-Cert来完成。Governance-Cert可以被集成或者独立部署,并由权威机构进行管理服务。从根证书到所有子证书,均由权威机构统一管理和托管存储。
在链初始化时,可由部署者调用接口完成根证书的生成。新增机构或节点可以通过Governance-Cert提供的查询接口,来查询根证书,并提交子证书请求。根证书管理者可从查询请求列表,来获取准入请求,并选择签发子证书。子证书签发完成,下一级证书采取同样逻辑处理。
通过Governance-Cert对于证书的管理,可以规范流程,提升效率,并保证证书安全。
多级证书托管
当集团或机构的参与者需要为旗下多个分支机构签发、存储、管理和重置私钥等。
在这种场景中,Governance-Cert提供了开箱可用的服务。集团或机构的参与者可以使用Governance-Cert来搭建一个集团或机构内部统一的证书托管平台,集中管理集团或机构内部所有的证书。当分支机构需要申请签发证书时,可以向集团或机构提出专有的证书管理服务请求。
证书工具包
Governance-Cert中cert-toolkit可作为独立的Java工具包在Java项目中被引用,代替命令行完成证书的生成和签发。企业或个人项目可集成Governance-Cert作为证书签发工具包。通过SDK的形式,开发者可在自己的Java项目中,扩展和定制个性化的需求功能,灵活满足各种证书相关的场景。
即刻使用
文档地址:
https://governance-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-Governance-Cert/index.html
GitHub代码库地址:
https://github.com/WeBankBlockchain/Governance-Cert
gitee代码库地址:
https://gitee.com/WeBankBlockchain/Governance-Cert
欢迎参与WeBankBlockchain的社区建设:
如项目对您有帮助,欢迎点亮我们的小星星(点击项目右上方Star按钮)。
欢迎提交代码(Pull requests)。
提问和提交BUG。
如果发现代码存在安全漏洞,可通过https://security.webank.com/上报。
如需咨询技术问题,欢迎关注本公众号,对话框回复【小助手】进技术交流群。