公钥是由私钥生成的,证书则是由一个可信方对某个公钥进行认证的结果。
用户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.pem
和msp/cacerts/ca.org1.example.com-cert.pem
是一样的
tlsca/tlsca.org1.example.com-cert.pem
和msp/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
转载请注明来源