Hyperledger-Fabric源码分析(MSP-证书生成)

MSP的主要的任务是运用手中的证书来做身份和权限控制。在Fabric中证书的生成可以通过cryptogen来生成,基本上这是一种静态工具,玩玩demo是可以的,不建议在生产环境下使用,官方推荐用Fabric-ca。不过没关系,内部逻辑都类似。

20180413180640626.JPG

配置文件

OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    Template:
      Count: 1
    Users:
      Count: 1

  • 基本上这个配置很简单,one orderer,one org,one peer from org,one user。

生成结构

  • 生成的文件分两部分,peer和orderer。如下图所示。

  • 初看上面生成的文件有点懵,没关系,下面我们以peer为例,来分析下,这些是怎么来的。

peer

1554305990325.png

orderer

1554306053688.png

cryptogen

peerOrganizations/org1.example.com

ca

func NewCA(baseDir, org, name, country, province, locality, orgUnit, streetAddress, postalCode string) (*CA, error) {

   var response error
   var ca *CA

   err := os.MkdirAll(baseDir, 0755)
   if err == nil {
      priv, signer, err := csp.GeneratePrivateKey(baseDir)
      response = err
      if err == nil {
         // get public signing certificate
         ecPubKey, err := csp.GetECPublicKey(priv)
         response = err
         if err == nil {
            template := x509Template()
            //this is a CA
            template.IsCA = true
            template.KeyUsage |= x509.KeyUsageDigitalSignature |
               x509.KeyUsageKeyEncipherment | x509.KeyUsageCertSign |
               x509.KeyUsageCRLSign
            template.ExtKeyUsage = []x509.ExtKeyUsage{
               x509.ExtKeyUsageClientAuth,
               x509.ExtKeyUsageServerAuth,
            }

            //set the organization for the subject
            subject := subjectTemplateAdditional(country, province, locality, orgUnit, streetAddress, postalCode)
            subject.Organization = []string{org}
            subject.CommonName = name

            template.Subject = subject
            template.SubjectKeyId = priv.SKI()

            x509Cert, err := genCertificateECDSA(baseDir, name, &template, &template,
               ecPubKey, signer)
            response = err
            if err == nil {
               ca = &CA{
                  Name:               name,
                  Signer:             signer,
                  SignCert:           x509Cert,
                  Country:            country,
                  Province:           province,
                  Locality:           locality,
                  OrganizationalUnit: orgUnit,
                  StreetAddress:      streetAddress,
                  PostalCode:         postalCode,
               }
            }
         }
      }
   }
   return ca, response
}
  • 生成椭圆曲线公私钥对fe85445ac723e6c3c16084dc6f4bec0f17ef2e92fb255bbb00e9822772f3127e_sk
  • 有兴趣可以去看看genCertificateECDSA,如果template和parent相同,说明生成的是自签名(self-signed)的证书。
  • 还有SKI是取得私钥的摘要
  • 注意证书里面的CommonName和Organization,多说无益,直接看证书内容就好。
1554308756382.png
1554307718914.png

tlsca

跟ca同理,这里只展示证书内容,同样要注意证书里面的CommonName和Organization

1554307878009.png

msp

admincerts

跟下面Admin@org1.example.com的证书保持一致

1554311752052.png

cacerts

err = x509Export(filepath.Join(baseDir, "cacerts", x509Filename(signCA.Name)), signCA.SignCert)

其实就是将ca的证书导出到这个目录

1554308194374.png

tlscacerts

err = x509Export(filepath.Join(baseDir, "tlscacerts", x509Filename(tlsCA.Name)), tlsCA.SignCert)

同理将tlsca的证书导出到这个目录

1554308340854.png

peers

peer0.org1.example.com

msp
admincerts

跟下面Admin@org1.example.com的证书保持一致

1554311752052.png
keystore
priv, _, err := csp.GeneratePrivateKey(keystore)

再次生成公私钥对,可以看到跟之前完全不一样,全新的一对

1554309034404.png
signcerts
cert, err := signCA.SignCertificate(filepath.Join(mspDir, "signcerts"),
   name, ous, nil, ecPubKey, x509.KeyUsageDigitalSignature, []x509.ExtKeyUsage{})

第一次看来由ca来签发证书。直接来看证书内容。

  • 怎么体现是由ca来签发的?AKI,也就是Authority Key Identifier。可以去上面的ca证书的SKI去比对。两者是要严格一致的。
  • 证书的其中一个功能是对外宣告,我包含的公钥是合法的,放心用,可以看到这里包含的公钥就是之前生成的。意味着数字签名会用keystore的私钥,让其他人用证书里面的公钥来验证。
1554309256158.png
cacerts

跟之前的处理一样,这里也是ca的冗余

tlscacerts

跟之前的处理一样,这里也是tlsca的冗余

tls
ca.crt

这里是tlsca的冗余,可以自行去比较,跟前面的tlsca完全一致

server.key

这里是针对tls重新生成的一对公私钥,意味着要用tlsca签发tls使用的证书。

1554310326178.png
server.crt
1554310369592.png

users

User1@org1.example.com

msp
admincerts

跟下面Admin@org1.example.com的证书保持一致

1554311752052.png
keystore

同上

1554310865758.png
signcerts

同上

1554310832186.png
cacerts

同上

tlscacerts

同上

tls
ca.crt

同上

client.key

同上

1554310981694.png
client.crt

同上

1554311012410.png

Admin@org1.example.com

msp
keystore

同上

1554311480554.png
admincerts

注意这里跟signcerts的一致,也是整体admin的证书

1554311367214.png
signcerts

同上

1554311574420.png
cacerts

同上

tlscacerts

同上

tls
ca.crt

同上

client.key

同上

1554311627359.png
client.crt

同上

1554311652573.png

总结

讲这么多,还不如画张图来的清楚
当时看的时候漏了,admincert是从User的signcert来,然后扩散的。


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

推荐阅读更多精彩内容