02-cryptogen的帐号管理体系

Hyperledger Fabric提供了一个用开生成相关证书的模块,叫做cryptogen。这个工具会根据用户指定的配置文件生成相关的证书

在使用cryptogen生成证书之前,我们首先要了解Fabric的架构和管理逻辑。从高层次来说,Fabric的参与者被称为组织Org,所有组织会共同维护一个用来排序节点的集群称为orderer,各个组织内部会维护若干台peer节点,用于接受客户端请求和记账。
除此之外,每类节点都可以包含若干用户,必须有一个Admin用户,每个节点和用户

在通信时,节点之间可以设置通过TLS加密,这就需要TLS的证书,因此Fabric的证书分为两类MSP和TLS。

Orderer类型
  -  联盟(这里称为联盟是因为Orderer由多个组织合作共同维护的排序节点集群,便于理解)

Peer类型
  -  组织1
  -  组织2
  -  组织3
    -  peer节点
      -  peer0节点
      -  peer1节点
          - msp 
          - tls
    -  用户
      -  Admin
      -  User1
          - msp 
          - tls

生成证书

配置文件

cryptogen提供了下面的命令,用来生成配置模板

cryptogen showtemplate

修改配置文件为下面的内容,其中指定了Order类型的联盟名称jianshu.com,Peer类型指定了有两个组织,分别为org1.jianshu.comorg2.jianshu.com,两个组织分别有2个peer节点和3/2个用户。

OrdererOrgs:
    - Name: Orderer
      Domain: jianshu.com
      Specs:
            - Hostname: orderer
      Template:
            Count: 2
PeerOrgs:
    - Name: Org1
      Domain: org1.jianshu.com
      Template:
            Count: 2
      Users:
            Count: 3
    - Name: Org2
      Domain: org2.jianshu.com
      Template:
          Count: 2
      Users:
          Count: 2

生成证书

使用下面的命令可以根据配置文件生成证书文件

cryptogen generate --config=crypto-config.yaml --output ./crypto-config

证书结构

进入crypto-config文件夹,使用tree -L 2可以查看目录的结构

├── ordererOrganizations
│   └── jianshu.com
│       ├── ca
│       ├── msp
│       ├── orderers
│       ├── tlsca
│       └── users
└── peerOrganizations
    ├── org1.jianshu.com
    │   ├── ca
    │   ├── msp
    │   ├── peers
    │   ├── tlsca
    │   └── users
    └── org2.jianshu.com
        ├── ca
        ├── msp
        ├── peers
        ├── tlsca
        └── users

从上面的结构来说,内部主要根据节点类型来划分,Orderer类型保护一个联盟,Peer类型有两个组织。

证书详解

由于Orderer类型的联盟和Peer类型的组织内的证书结构是一样的,我们org1.jianshu.com为例,了解其内部的结构。首先,使用tree命令打印出这个文件夹下的内容,-L后面的数字可以调整层次。

├── org1.jianshu.com
│   ├── ca
│   │   ├── ca.org1.jianshu.com-cert.pem
│   │   └── 965e1493f4_sk
│   ├── tlsca
│   │   ├── 2312a9c0380eb48d343_sk
│   │   └── tlsca.org1.jianshu.com-cert.pem
│   ├── msp
│   │   ├── admincerts
│   │   ├── cacerts
│   │   └── tlscacerts
│   ├── peers
│   │   ├── peer0.org1.jianshu.com
│   │   └── peer1.org1.jianshu.com
│   └── users
│       ├── Admin@org1.jianshu.com
│       ├── User1@org1.jianshu.com
│       ├── User2@org1.jianshu.com
│       └── User3@org1.jianshu.com
  • 对于一个组织来说,其有两类根证书,一类是用户根证书,一类是用来TLS通信的根证书,分别在catlsca文件夹内部。
  • msp文件夹是组织的身份文件,内部包含了Admin证书admincerts,组织根证书cacerts和tls的根证书tlscacerts
  • peers中包含了组织org1.jianshu.com各个peer节点的相关认证文件
  • users中包含了组织org2.jianshu.com各个用户的相关认证文件

ca和tlsca

下面我们以ca为例,验证一下根证书。ca内部以_sk结尾的是组织org1.jianshu.com的私钥,pem是组织org1.jianshu.com的自签名根证书。

查看根证书信息

openssl x509 -in root.crt -text | less

验证证书与私钥匹配

下面是一个验证脚本,参数1是证书,参数2是私钥,保存为certcheck.sh,修改权限后可以执行

#!/bin/bash
if [[ "$1" = "" || "$2" = "" ]]; then
    echo "certCheck.sh  certfile keyfile"  
    exit 0;
else
    #certModuleMd5=`openssl x509 -noout -modulus -in $1 | openssl md5`
    #privateModuleMd5=`openssl rsa -noout -modulus -in $2 | openssl md5`


        #if [  "$certModuleMd5" = "$privateModuleMd5" ] ; then
        #        echo "ok"
    #else
    #   echo "not ok"
        #fi
        value=`openssl x509 -text -noout -in $1  | grep "Public Key Algorithm:" | awk  -F ':'  'BEGIN {}  {print $2} END {}'`

        if [ "$value" = " rsaEncryption" ] ; then
                echo $value

                requestModuleMd5=`openssl x509 -modulus -in $1 | grep Modulus | openssl md5`
                privateModuleMd5=`openssl rsa -noout -modulus -in $2 | openssl md5`

        else
                `openssl ec -in $2 -pubout -out ecpubkey.pem `
                privateModuleMd5=`cat ecpubkey.pem | openssl md5`
                requestModuleMd5=`openssl x509 -in $1  -pubkey  -noout | openssl md5`

        fi
        if [  "$requestModuleMd5" = "$privateModuleMd5" ] ; then
                echo "ok"
        fi


fi

执行下面命令,输出ok说明私钥和证书是匹配的

./certcheck.sh peerOrganizations/org1.jianshu.com/ca/ca.org1.jianshu.com-cert.pem peerOrganizations/org1.jianshu.com/ca/fab24049c802a9bfcd056753c1175fe369f728c531315f106aeb11965e1493f4_sk 
read EC key
writing EC key
ok

msp文件夹

msp文件夹中分别保存了组织org1.jianshu.com的相关根证书

├── msp
│   ├── admincerts   [Admin用户的证书]
│   │   └── Admin@org1.jianshu.com-cert.pem
│   ├── cacerts   [ca的根证书]
│   │   └── ca.org1.jianshu.com-cert.pem
│   └── tlscacerts   [tlsca的根证书]
│       └── tlsca.org1.jianshu.com-cert.pem

ca.org1.jianshu.com-cert.pem与tlsca.org1.jianshu.com-cert.pem分别与catlsca下的同名文件内容一样, 可以通过md5sum命令查看。

# ca下
md5sum ca/ca.org1.jianshu.com-cert.pem 
00067a1e3e1ec302e7c3e66433bc73ed  ca/ca.org1.jianshu.com-cert.pem
# msp/cacerts下
md5sum msp/cacerts/ca.org1.jianshu.com-cert.pem 
00067a1e3e1ec302e7c3e66433bc73ed  msp/cacerts/ca.org1.jianshu.com-cert.pem

至于admincerts的Admin@org1.jianshu.com-cert.pem文件也是Admin用户的证书,与Admin@org1.jianshu.com里面的证书一样。

peers文件夹

peers文件夹内有两个peer节点,分别是peer0.org1.jianshu.compeer1.org1.jianshu.com,先以peer0为例说内部的结构

├── peer0.org1.jianshu.com
│   ├── msp
│   │   ├── admincerts    [组织Org1的Admin用户证书]
│   │   │   └── Admin@org1.jianshu.com-cert.pem
│   │   ├── cacerts        [组织Org1的CA根证书]
│   │   │   └── ca.org1.jianshu.com-cert.pem
│   │   ├── keystore    [组织Org1的peer0节点的证书的私钥]
│   │   │   └── eba279fe94e117473da7eee00_sk
│   │   ├── signcerts    [组织Org1的peer0节点的证书,由组织Org1的CA根证书签发]
│   │   │   └── peer0.org1.jianshu.com-cert.pem
│   │   └── tlscacerts    [组织Org1的tls的根证书]
│   │       └── tlsca.org1.jianshu.com-cert.pem
│   └── tls
│       ├── ca.crt   [组织Org1的tls的根证书,与tlscacerts下的一样]
│       ├── server.crt   [由组织Org1的tls的根证书签发的用于tls通信的证书]
│       └── server.key [由组织Org1的tls的根证书签发的用于tls通信的证书的私钥]
  • 在上面的结构中,signcerts是peer节点peer0的证书,keystore是与这个证书对应的私钥;具体可以使用之前的脚本进行验证
  • 其他都是peer0所属的组织Org1的相关证书。
  • tls文件夹下是peer0进行tls通信时使用的证书server.crt和私钥server.key,而ca.crt是组织Org1的tls根证书

users文件夹

users文件夹内部结构与peers文件夹一致,主要包含了每个用户的msp证书和私钥,tls通信使用的证书和私钥。

每个组织都有自己的msp根证书和tls根证书,每个组织都包含若干的peer节点和user用户,他们自己的证书都是通过相对应类型的根证书签发的。而且,从文件夹的结构,我们也可以看出,每个证书都可以从文件名称看出是何种证书。

在下一节中,我们将会启动Fabric-CA的服务器,并将其绑定到组织org1.jianshu.com上,由其来动态签发证书。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容