在Fabric超级账本中,如果我们想动态增加用户发行证书,一般会使用Fabric CA或者其它CA。然而在国密改造场景中,当前缺乏可用的开源的Fabric CA国密版本。因此,笔者研究了一下,发现了一种可不使用CA直接使用cryptogen来生成新证书的方法,暂时减弱对Fabric CA国密版本的需求。同时,拓展开去,因为此方法没有版本限制,因此个人认为也可用于Fabric 2.0及以上版本的国密改造。

一、前提

最近由于工作需求,尝试了一下Fabric 超级账本的国密改造应用(仅只是应用,未涉及底层改造)。当前Fabric超级账本国密改造其实分为三大块:Fabric源码,Fabric SDK和Fabric CA。前两个部分的国密改造网上已经有开源的版本了(风险自负),具体使用方法见我的另外两篇文章:

  • Fabric 超级账本 1.4.1国密改造版本Centos单机部署及测试流程
  • 一个基于同济技术路线实现的Fabric超级账本国密fabric-sdk-go的应用流程

而可用的开源的Fabric CA国密版本却一直找不到。网上已经有的开源的Fabric CA国密版本都有这样或者那样的问题,要么无法和cryptogen工具生成的证书互通,要么使用起来有问题。当然不排除有未开源的可用的Fabric CA国密版本,但是目前对我来说,需要一个免费的并且可用的Fabric CA国密版本。

–这里打个广告,关于cryptogen和Fabric CA证书互通问题,见我的另一篇文章:超级账本中 cryptogen和Fabric CA证书互通问题

二、需求

但是我们为什么要用国密版的CA呢,使用过fabric-samples测试网的读者都知道,比如first-network网络启动时默认使用cryptogen生成证书,但是它生成的证书数量是固定的。如果你想添加一个新用户,你可以更改配置中证书的数量,然后重新生成。但是重新生成后就是新的证书,原来的证书无法使用了。这里使用CA就比较方便,你可以随时新增用户而不影响整个网络。

但是问题出现了,目前在Fabric国密改造的需求中,找不到开源的可用的Fabric CA国密版本。当然我们也可以不用CA,比如使用cryptogen工具在网络启动时直接发行100个用户,也就够用了。但这样做总是有些low。

我们知道,一个证书发行机构不管是Fabric CA还是cryptogen,只要它们的私钥和根证书相同,它们就是同一个CA,那么利用这一点我们能不能反其道而行之呢?既然Fabric CA不可求,那我们就不使用Fabric CA,何不尝试使用cryptogen利用已经生成的私钥和根证书来发行属于同一机构的证书呢?

三、实现

说干就干,既然想使用cryptogen,就先看下它能做什么。直接在fabric-samples/bin目录下运行./cryptogen help,会得到下面的输出:

usage: cryptogen [<flags>] <command> [<args> ...]Utility for generating Hyperledger Fabric key materialFlags:--help  Show context-sensitive help (also try --help-long and --help-man).Commands:help [<command>...]Show help.generate [<flags>]Generate key materialshowtemplateShow the default configuration templateversionShow version informationextend [<flags>]Extend existing network

咦,有个extend子命令,意思为扩展存在的网络,看来有戏。去官方文档看下这个命令的详细介绍:

看介绍它是用来拓展网络的,虽然示例中是增加了一个组织,但是总得尝试一下。

于是进入 fabric-samples/first-network目录,直接运行./byfn.sh up,启动测试网络。注意这里我们生成的新用户需要测试,所以需要参考我那篇SDK使用的文章,先启动国密版的测试网络并且接入国密SDK测试通过。

然后因为byfn.sh脚本中是生成子命令:cryptogen generate --config=./crypto-config.yaml 我们要改成extend子命令。而所以根据上图的示例,首先我们得创建一个new-org1-config.yaml,内容就是crypto-config.yaml中只包含org1的部分,并且将用户数量改为3(除管理员外),如下所示:

# ---------------------------------------------------------------------------
PeerOrgs:# ---------------------------------------------------------------------------# Org1# ---------------------------------------------------------------------------- Name: Org1Domain: org1.example.comEnableNodeOUs: trueTemplate:Count: 2Users:Count: 3

保存退出后,在网络启动的情况下,我们在first-network目录下运行

../bin/cryptogen extend --config=./new-org1-config.yaml

屏幕会有类似的输出:

hehehehe &{{57896044551258231062740198220913455226441901632205615997740090104278065086466 0xc00007c140 [536870905 268435455 895 268428288 536870911 268435455 536870911 150994943 268435455] [394377860 220399154 355969936 163370829 236861671 88177300 303341152 24396229 75627569] [137364797 52992271 113266657 202339045 31563580 107393171 24488059 247693942 35835723] [408558522 55895443 311818945 254526569 75260154 203012265 258167614 151236203 209300666]} 93322454353996403820296961564506544728212789716739747136454365915828308484093 6966228001545439549108757395662279044399389641667730857900146482088229055896}
hehehehe &{{57896044551258231062740198220913455226441901632205615997740090104278065086466 0xc00007c140 [536870905 268435455 895 268428288 536870911 268435455 536870911 150994943 268435455] [394377860 220399154 355969936 163370829 236861671 88177300 303341152 24396229 75627569] [137364797 52992271 113266657 202339045 31563580 107393171 24488059 247693942 35835723] [408558522 55895443 311818945 254526569 75260154 203012265 258167614 151236203 209300666]} 30306800224514377016096554966983804996273193405862204168872079179630755829514 92380653969940809229613336050795378666932279691927801513843736432124786976274}
hehehehe &{{57896044551258231062740198220913455226441901632205615997740090104278065086466 0xc00007c140 [536870905 268435455 895 268428288 536870911 268435455 536870911 150994943 268435455] [394377860 220399154 355969936 163370829 236861671 88177300 303341152 24396229 75627569] [137364797 52992271 113266657 202339045 31563580 107393171 24488059 247693942 35835723] [408558522 55895443 311818945 254526569 75260154 203012265 258167614 151236203 209300666]} 4311683100071045748705022318436765074509955434317854120607477640429312740432 99882041785790063772976559666758032554047899796398476617595580203019199906461}
hehehehe &{{57896044551258231062740198220913455226441901632205615997740090104278065086466 0xc00007c140 [536870905 268435455 895 268428288 536870911 268435455 536870911 150994943 268435455] [394377860 220399154 355969936 163370829 236861671 88177300 303341152 24396229 75627569] [137364797 52992271 113266657 202339045 31563580 107393171 24488059 247693942 35835723] [408558522 55895443 311818945 254526569 75260154 203012265 258167614 151236203 209300666]} 18113313443822832374468548508152336351389244341164675859983815020626652461706 76852597410980258905261680766762896262700409724285143957744057129835174169268}

好了,这时查看相应的用户目录,如下图:

四、测试

到此,我们的新用户就生成了,可以看到多了两个用户。让我们来测试一下:

  • 旧用户是否被改写
  • 新用户是否有效

根据我的国密GO-SDK使用的文章,打开main.go,可以看到当前用户是User1,直接运行go run main.go,会得到结果为90,证明我们旧用户是有效的。然后我们将User1改成User3,再次运行go run main.go,仍然会得到结果为90,证明我们新用户是有效的。

其实我们也可以将使用../bin/cryptogen extend --config=./new-org1-config.yaml前后的Admin用户和User1用户作一下对比,可以发现它们是一模一样的。从前面的输出结果可以猜测(它有四行输出),它应该是根据某种固定规则生成的证书,所以前面重复的用户生成了相同的证书。这个比较我已经做过了,就不在这里列出了。

好了,使用cryptogen替代Fabric CA发行新用户就是这么简单。不过,它的应用场景用限,远没有CA使用广泛,它只能作为没有CA时的替代方法。

虽然我们还是要继续追求 Fabric CA 国密版,不过有东西能用就行,不是么… _

五、展望

因为此替代方法没有版本限制,也就是说可应用于Fabric 2.0及以上版本的国密改造。当前,网安已经开源了Fabric 2.0源码的国密版本,如果按照这个思路可以进行相应的Fabric CA或者其它CA的替代,那么Fabric 2.0的国密改造从可用性上来讲,就只剩下sdk的国密改造了。

Fabric CA国密版本的一种替代方案--使用cryptogen工具增加新用户相关推荐

  1. Fabric系列 - 国密改造

    Hyperledger Fabric 国密改造项目介绍 有关bccsp的改造方案的RFC文档 Fabric国密改造项目由Hyperlegder中国工作组(TWGC)发起执行,旨在构建支持国密算法且密码 ...

  2. c语言ios包的国密算法包,一种IC卡电子现金自助充值方法及其系统与流程

    本发明涉及IC卡充值技术领域,具体涉及一种IC卡电子现金自助充值方法及其系统. 背景技术: 传统的IC卡离线支付(电子现金.电子钱包等)由于资金存放于卡片内部,因此充值必须依赖读卡设备和柜台. 但多数 ...

  3. 国密算法(SM2,SM3,SM4)辅助工具升级版(OTP+PBOC3.0)

    从编写最初版本用于SM2,SM3和SM4算法验算的辅助工具已有一年多的时间了,国密算法的应用和普及也是不温不火的.编写最初算法代码和工具时所参考的文档还非正式的国密标准文件,而目前国密标准文件发布了几 ...

  4. 一种在旧代码上增加新需求的重构模式

    应用场景 相信大家遇到过这种场景: 旧代码中已经有一堆的if-else或者switch-case了:产品却要求在这段流程里增加一个新的功能. 这种时候大家会怎么做? 我的建议是: 重构这段代码.在重构 ...

  5. Ubuntu 增加新用户并赋予root权限及免密的方法

    添加用户 添加一个名为hylink的用户 adduser hylink 修改密码 passwd hylink Changing password for user hylink. New UNIX p ...

  6. fabric 国密改造

    背景 最近应公司项目需求,需要对fabric中的加密相关模块进行改造,主要目的是使fabric底层加密服务支持国密算法sm2.sm3以及sm4等.借这次机会,顺便熟悉一下fabric加密模块的源码实现 ...

  7. Hyperledger Fabric国密改造

    Fabric国密改造是个什么概念?我们来思考以下4个问题: 为什么偏偏是密码算法?(WHY?) 什么是国密算法?(WHAT?) 改造切入点什么?(WHERE?) 如何实现国密支持?(HOW?) 1.为 ...

  8. httpclient 不支持国密ssl_Hyperledger Fabric成都见面会:TWGC国密改造介绍

    会议介绍 2020年12月5日,第一次参加线下成都区域的线下见面会,此次见面会中,嘉宾分享了"货信云动产数字化和管理一体化的解决方案"."从区块链到空间区块链" ...

  9. Hyperleder Fabric国密改造一键部署工具区块链网络修改工具

    A.Fabric国密改造(以2.2版本为例) A.1.golang国密改造修改文件清单 └─src     └─crypto         │  crypto.go         │       ...

最新文章

  1. phpcms 指定id范围 调用_phpcms v9使用GET调用指定id文章内容、页面数据方法
  2. 计算机网络 上海交大 ppt,上海交大计算机网络2.ppt
  3. 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
  4. spring bean的创建,生命周期
  5. 【华为云动态】华为云携手Google,IBM,SAP等多家知名企业加入CDF,助力软件开发生态发展
  6. selenium 定位方式1
  7. docker mysql node_Docker打包nodejs项目和数据库
  8. Java SecureRandom 简单生成随机正整数
  9. Codeforces Round #435 (Div. 2) E. Mahmoud and Ehab and the function[二分]
  10. c语言鼠标游戏代码,自己用C写的一个简单的打地鼠游戏代码出了个问题(鼠标和循环不能...
  11. Windows窗口程序设计入门(C#版)
  12. 君生我未生,我生君已老
  13. 计算机管理员和用户名区别,Administrator记不住?教你自定义管理员账户名称
  14. OpenSSL生成.key、.crt、.pfx证书(Windows下)
  15. 使用ITunes向苹果手机中导入mobi文件
  16. kerberos mysql配置_CDH安装之篇四:启用Kerberos认证
  17. bash shell 命令
  18. php微擎Goto2C解密研究
  19. 【论文笔记】—本征图像分解—Unsupervised—USI^3^D—2020-CVPR
  20. 2,4-二硝基苯磺酰基(DNBS)修饰BODIPY染料识别GSH/溶酶体

热门文章

  1. Amazon Aurora Serverless v2 正式发布:瞬时扩展应对高要求的工作负载
  2. SDIO wifi Marvell8801/Marvell88w8801 介绍(四) ---- Marvell8801/Marvell88w8801命令/事件/数据格式
  3. 什么是人工智能物联网(AIoT)一文教你快速了解人工智能物联网(AIoT)
  4. linux数据库云盘备份,linux定时备份本地文件或数据库到百度云盘bypy
  5. 中国微型无刷直流电动机市场趋势报告、技术动态创新及市场预测
  6. 【NOWCODE SEVEN】:二分查找/排序
  7. windows代理软件对比
  8. JavaCard开发环境搭建
  9. cmd中cd命令使用
  10. 用java做出聊天工具