fabric学习(11)——fabric-ca的使用

公钥是由私钥生成的,证书则是由一个可信方对某个公钥进行认证的结果。

用户A生成一对公私钥,公钥拿去”证书中心”(certificate authority,简称CA),CA使用自己的私钥对A的公钥进行加密,并加上A的其他信息,生成一个证书。

A向B发加密信息的时候,用自己的私钥进行签名,并附上自己的数字证书一起发送给B,B收到消息后,先用CA的公钥对A发来的数字证书进行解密,得到B的公钥(这个举措的目的是为了防止A的公钥被冒充),再用B的公钥对信息进行解密,从而保证消息传递的保密性。

具体公钥私钥及证书之间的关系,可以参考https://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

MSP(Menbership Service Providers)是一套组件,来指定用户执行某些操作的权限认证体系。

MAP需要设置在每个org,peer,order等,这样就可以实现验证和签名操作。

MSP可以通过openssl,cryptogen,fabric-ca三种方式生成

每个组织机构都有一个orgmsp的id,必须唯一

MSP目录结构

找一个order的msp,查看其目录结构

tree -L 3 $GOPATH/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/msp/

├── admincerts
├── cacerts
│   └── ca.example.com-cert.pem
├── config.yaml
└── tlscacerts
    └── tlsca.example.com-cert.pem

admincerts,用来存放admin证书

cacerts,root ca的证书

intermediatercerts,可选,中间CA

config.yaml,可选,组织机构的配置文件

crls,可选,撤销证书的目录url

keystore,存放私钥的文件目录

tlscacerts,可选,tls根证书的目录

tksintermediatecerts,可选,tls中间证书的目录

查看一下crypto-config下org1的目录结构

tree -L 3 $GOPATH/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com
├── ca
│   ├── 7e2461115a5db5c62b918b0b3f96838d6686ff07b232a3e45ffce24469a2f61e_sk
│   └── ca.org1.example.com-cert.pem #org1 ca 根证书
├── msp #msp目录
│   ├── admincerts
│   ├── cacerts 
│   │   └── ca.org1.example.com-cert.pem #org1 ca 根证书
│   ├── config.yaml
│   └── tlscacerts
│       └── tlsca.org1.example.com-cert.pem #org1 tls 根证书
├── peers #包含两个peer
│   ├── peer0.org1.example.com
│   │   ├── msp #每个peer下面都有一套msp和tls
│   │   └── tls
│   └── peer1.org1.example.com
│       ├── msp
│       └── tls
├── tlsca
│   ├── 52eb4b34f04bef7d7519930be954b739cc88dc4f5bd2ecbd09cae36ae2aec1e5_sk
│   └── tlsca.org1.example.com-cert.pem #org1 tls 根证书
└── users #每个user下面也都有一套msp和tls
    ├── Admin@org1.example.com 
    │   ├── msp 
    │   └── tls
    └── User1@org1.example.com
        ├── msp
        └── tls

其中

ca/ca.org1.example.com-cert.pemmsp/cacerts/ca.org1.example.com-cert.pem是一样的

tlsca/tlsca.org1.example.com-cert.pemmsp/tlscacerts/tlsca.org1.example.com-cert.pem是一样的,和peers/peerxx.com/tls/ca.crt也是一样的

用byfn脚本启动fabric时,docker-compose文件里面映射了msp目录,fabric启动的时候会对证书做校验。

msp证书基于x509的证书格式,是基于ECDSA椭圆曲线算法的

X509是定义公钥证书格式的一个标准,.cer.crt.der通常是二进制格式

X509证书格式通过如下命令查看

openssl x509 -in xxx.pem -noout -text
openssl x509 -in ca/ca.org1.example.com-cert.pem -noout -text

Certificate:
    Data:
        Version: 3 (0x2) #版本
        Serial Number: #序列号
            79:5d:c6:6e:d0:34:ab:7b:c6:37:87:42:24:9c:ee:b2
    Signature Algorithm: ecdsa-with-SHA256 #签名算法
        Issuer: C=US, ST=California, L=San Francisco, O=org1.example.com, CN=ca.org1.example.com #颁发机构
        Validity #有效期
            Not Before: Dec 15 10:17:00 2021 GMT
            Not After : Dec 13 10:17:00 2031 GMT
        Subject: C=US, ST=California, L=San Francisco, O=org1.example.com, CN=ca.org1.example.com #主体
        Subject Public Key Info: #公钥信息
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:31:db:26:2b:7f:87:fe:70:10:f0:d9:2b:e2:c8:
                    18:f5:02:57:d1:44:1b:cc:40:83:92:ed:8a:e0:5e:
                    ef:f2:0c:2b:60:a8:fb:3e:db:bf:04:68:d4:0d:bf:
                    64:e4:86:1e:76:a8:4e:10:c0:ed:96:e0:c8:75:eb:
                    74:9a:ff:eb:4b
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment, Certificate Sign, CRL Sign
            X509v3 Extended Key Usage:
                TLS Web Client Authentication, TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier:
                7E:24:61:11:5A:5D:B5:C6:2B:91:8B:0B:3F:96:83:8D:66:86:FF:07:B2:32:A3:E4:5F:FC:E2:44:69:A2:F6:1E
    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:d6:19:f6:10:53:00:c3:fd:c6:18:ae:77:2a:
         45:89:d2:d7:29:4f:09:12:73:a1:d6:4b:ac:fa:75:c6:6e:d9:
         df:02:20:1b:47:f4:3f:6d:6c:18:23:6a:58:00:2c:9b:26:ab:
         36:3b:d1:ba:c6:48:cb:57:d7:4c:8a:9c:5b:c4:63:2a:e3

详细命令及用法参考:

https://www.jianshu.com/p/a7cc86fcb592


转载请注明来源

×

喜欢就点赞,疼爱就打赏