docker – 如何从hyperledger中的hfc-key-store中的真实fabric-ca-server证书派生证书?

前端之家收集整理的这篇文章主要介绍了docker – 如何从hyperledger中的hfc-key-store中的真实fabric-ca-server证书派生证书?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想首先正确解释我的理解,如果我是对的,请告诉我真相,如果我弄错了,请告诉我,我错了.我的解释是关于hyperledger网络和节点sdk如何协同工作以及节点sdk如何连接到超级网络.

开始吧.当我启动hyperledger网络时,它所做的是在端口7054上创建fabric-ca-server docker镜像和容器.在该端口上,它注册了一个用户“admin with the password:”adminpwd“.这意味着还有证书制作对于这个用户.现在假设我想从节点sdk创建一个新用户.我想我需要做的是为管理员提供证书,以便我可以签署我的请求,网络知道我是管理员和部分网络.代码的作用是第一次写入getUserContext(“admin”),如果找不到,那么它会尝试使用用户名和密码(admin和adminpwd)注册.我的理解是getUserContext转到hfc-key -store文件夹并尝试查找admin的证书.如果找不到它,会发生注册然后发生createUser函数,它将从fabric-ca-server docker映像派生的证书放入hfc-key-store,这样当管理员再次尝试注册时,它不必转到fabric-ca-server docker 图片.我到目前为止对吗?我现在就问我的问题.

问题:

>我了解到,在尝试注册时,它无法从fabric-ca-server docker镜像获取管理员的原始证书,因为如果它被盗,整个网络都会被搞砸.所以它所做的是从原始的那个获得某种公共/私人和证书与我可以进行其他操作.问题是:如果有人偷了我的hfc-key-store文件夹,其中有管理员证书.他可以在没有注册的情况下进行操作,因为getUserContext(“admin”)将返回true并且它会让它做任何事情.如果有人偷了那个文件夹怎么办?这不危险吗?
>我不明白getUserContext()和setUserContext()以及createUser()函数的含义.如果你能做到,只要用一种非常易于理解的语言来描述它们,因为我已经很长一段时间试图绕过这个但没有运气.为什么我们需要这些功能,它们对我们的帮助等等.
>为什么cryptogen工具不能用于生产,而fabric-ca-server可用于生产?

最佳答案
那里似乎有很多问题.让我一步一步解释.如果出现问题或不清楚,请发表意见.

Fabric被设计为Consortium区块链系统,广泛用于企业业务场景.在Fabric业务网络中,每个组织通常包含至少一个对等体,并且可选择一个对等体.

想想这样的商业场景.有几家公司希望一起做生意.但是,他们不够相互信任.所以他们决定用Fabric来解决他们的痛点.假设该网络包含3个公司(组织),每个公司(组织)有一个同行和一个ca.

现在业务网络已经设置好了.

首先,让我解释一下入学的概念.

>每个组织的ca都有一个bootstrap用户,这来自用户名和密码,通常样本会使用admin / adminpw.在ca服务器设置期间,此引导用户正在写入CA的数据库.设置后,引导用户注册.但没有注册.
>接下来是注册引导程序用户.在这一步中,fabric-sdk(稍后我将使用sdk)将首先生成私钥/公钥对,然后生成csr(certificate signing request),最后使用私钥签署csr并将签名的csr发送到fabric -ca服务器.
>当fabric-ca服务器收到签名的csr时.它为该用户生成证书.证书包含用户的公钥. Fabric-ca将使用其私钥对此请求进行签名,并在证书上附加其签名.
> sdk从fabric-ca服务器获取响应(来自3的证书). fabric-sdk将证书和用户的私钥放在一起(我们称之为注册)作为方法enroll()的响应.
>现在,引导用户注册,并可使用此注册访问结构网络.

我们可以使用bootstrap用户在此组织中注册注册新用户.这就是我们将财团区块链系统称为许可区块链系统的原因.

其次,让我解释一下sdk KVS(键值存储)的概念.

我们已经从上面的步骤获得了用户的privateKey和证书.那么我们如何坚持这些数据呢?有几种选择,将其存储在应用层数据库,一些硬件加密钱包,一些基于云的HSM等.

Fabric-sdk提供了一个KVS来做到这一点.这是一个可选选项,您可以选择是否使用它.坦率地说,我不建议在生产系统中使用它.如果你只想尝试某些东西或测试一些东西,这很好,因为它非常简单.

默认情况下,fabirc-sdk-node将使用文件系统KVS.它将凭据存储在磁盘中,这就是你提到的hfc-key-store文件夹.

那么如果KVS被盗会怎么样?

所有注册都被盗了.所有证书和私人钥匙都被盗了.攻击者可以使用这些证书和privateKeys使用这些证书中的标识访问区块链系统.这是一场灾难.

createUser()用于什么?

而不是将这些注册存储在文件系统中.将其存储在Application层数据库中的更好选择.每次我们想要访问区块链系统时,我们都可以先从db查询获取证书和privateKey.然后使用createUser()接口创建新的User实例.此用户实例用作访问区块链系统的标识.

最后,让我解释一下Fabric中的事务流程

我们没有有效的用户证书和privateKey.我们如何向Fabric网络发送交易? fabric-peer如何验证交易并知道我是谁?

>每个事务都包含用户的身份.如果要通过userA提交事务,则应在进一步支持调用之前调用setUserContext(userA).
>事务提议在邮件头中包含用户的证书.在将事务发送到fabric-peer之前,sdk将使用当前用户的私钥来签署此事务提议.
>在同行方面.当对等体收到endorse请求时,对等体将使用fabric-ca的根证书来验证该请求中的证书,以便对等体知道该请求来自已知CA发出的身份,现在证书是可信的.然后对等体将解析证书并获取身份的公钥,然后使用此公钥验证事务的签名(我在上面描述了tx由私钥签名,现在由公钥验证),现在交易是可信的.

从事务流程中,我们了解到必须使用用户的证书发送事务并使用用户的私钥进行签名.这就是我们在fabirc-sdk设计setUserContext()接口的原因.

加密工具

此工具用于在系统设置时生成私钥/公钥对以及相应的证书.之后,我们需要一个动态的添加/删除身份机制.而解决方案是Fabric-ca.

Note,fabric-ca is optional,you may use any other CA.

猜你在找的Docker相关文章