fabric-ca、Identity 与 PKI

Posted by Charlie Lin on April 14, 2020

fabric-ca、Identity 与 PKI

fabric 中的密钥体系采用 X.509 —— 密码学里公钥证书的标准格式。X.509证书已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名。

除了证书本身功能,X.509还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。

Identity(身份)

在一个区块链网络中有许多不同的角色,包括:peers、orderers、client 应用程序、管理员等。网络中的每一个参与者都具有一个封装在 X.509 证书中的数字身份。这个身份非常之重要,因为它确定了对资源的确切权限以及对参与者在区块链网络中拥有的信息的访问权限。

要使身份能够被验证,它必须来自一个受信任的机构。fabric 中的 MSP(Membership Service Provider)就是这一个一个受信任的机构。Fabric 中默认的 MSP 使用 X.509 证书作为身份,采用传统的公钥基础结构(Public Key Infrastructure,PKI)分层模型。

PKI

公钥基础结构(Public Key Infrastructure)是一组互联网技术,可在网络中提供安全通信。 PKI 由向各方(例如,服务的用户,服务提供者)发布数字证书(Digital Certificate)的证书授权中心(CA)组成,然后使用它们在与其环境交换的消息中对自己进行身份验证。CA 的证书撤销列表(CRL)构成不再有效的证书的参考。证书的撤销可能由于多种原因而发生。例如,因为与证书相关联的加密私有材料已被公开,所以证书可能被撤销。

虽然区块链网络不仅仅是一个通信网络,但它依赖于 PKI 标准来确保各个网络参与者之间的安全通信,并确保在区块链上发布的消息得到适当的认证。

在 PKI 中有四个关键元素:

  • 数字证书
  • 公私钥对
  • 证书授权中心
  • 证书撤销列表

Digital Certificate (数字证书)

数字证书是包含与证书持有者相关的属性的文档。最常见的证书类型是符合 X.509标准的证书,它允许在其结构中编码一些用于身份识别的信息。 数字证书使用密码学中的数学技术进行保护。只要信任证书的颁发者,即证书授权中心(CA),密码学就支持证书拥有者将证书提交给他人来证明自己的身份。只要 CA 始终安全地保存 CA 的私钥,任何阅读证书的人都可以确定证书主人的信息没有被篡改,将他的 X.509 证书视为无法改变的数字身份。

下面我们来看看在 fabric-samples 中的一个证书例子。

根证书

根证书是属于证书授权中心自己的证书,是信任链的起点。根证书没有上层机构再为其本身作数字签名,所以都是自签证书。因此在 fabric 中,根证书就是由 fabric-ca 用自己的私钥对自己签名的证书。
例: 在 fabric 中找到一个 ca.pem 文件使用命令openssl x509 -noout -text -in ca.pem 解析出来: 可以看到在证书的各个属性中,发行方 Issuer 与主体 Subject 完全一致,这就是一个来自 ca.org1.example.com 的 根证书,也称为 CA 自签名证书。

普通证书

普通证书是由证书授权中心签发的证书,里面包含证书主体的信息、证书主体的公钥、使用的算法等信息。同样找到一个 peer 节点的证书 peer.pem,也是用openssl x509 -noout -text -in peer.pem 将其解析出来: 可以看到,这是一个由 ca.org1.example.com 颁发给 peer0 的证书。

公私钥对

fabric 中使用非对称密钥来进行身份验证与验证消息的完整性。关于非对称加密的相关知识这里不再赘述。

证书授权中心(Certificate Authority)

CA 是网络安全协议中的常见名词。

证书授权中心向不同的参与者颁发证书。这些证书由 CA 进行数字签名,并与参与者的公钥绑定在一起。如果一方信任该 CA 并且知道该 CA 的公钥,他就能信任证书中所包含的公钥以及参与者的属性。 证书本身可以随便传播,因为它们既不包含任何一方的私钥。 就像上面提到过的,CA 也有一个证书。这就允许从一个给定 CA 获取了身份信息的消费者通过校验证书来验证他们的身份,因为只有对应的私钥(CA 的私钥)才能生成该证书。

根 CA,中间 CA 和信任链

CA 有两种形式:根 CA和中间 CA 。因为根 CA(Symantec,Geotrust等)必须安全地向互联网用户颁发数亿个证书,所以将这个过程分散到所谓的中间 CA 中是很有用的。这些中间 CA 具有由根 CA 或其他中间 CA 颁发的证书,允许为链中的任何 CA 颁发的任何证书建立“信任链”。追溯到根 CA 的能力不仅让 CA 的功能在仍然提供安全性的同时进行扩展(允许使用证书的组织充满信心地使用中间 CA),还限制了根 CA 的暴露,如果根 CA 受到损害,将会危及整个信任链。另一方面,如果中间 CA 受到损害,则曝光量会小得多。 只要每个中间 CA 的证书的颁发 CA 是根 CA 本身或具有对根 CA 的信任链,就在根 CA 和一组中间 CA 之间建立信任链。 中间 CA 在跨多个组织颁发证书时提供了巨大的灵活性,这在许可的区块链系统(如Fabric)中非常有用。例如,你将看到不同的组织可能使用不同的根 CA,或者使用具有不同中间 CA 的相同根 CA,这取决于网络的需求。

Fabric CA

由于 CA 的重要性,Fabric 提供了一个内置的 CA 组件—— Fabric CA ——可以在区块链网络中创建 CA。Fabric CA 是一个私有根 CA 的提供者,能够管理具有 X.509 证书形式的 Fabric 参与者的数字身份。Fabric CA 是针对 Fabric 的根 CA 的需求所定制化的 CA,因此它内在地无法为在浏览器中当做通用 SSL 证书使用。

证书撤销列表 (CRL)

证书撤销列表(Certificate Revocation List,CRL)很容易理解,它是 CA 知道由于某些原因而被撤销的证书的引用列表。 当第三方想要验证另一方的身份时,它首先检查颁发 CA 的 CRL 以确保证书尚未被撤销。验证者并非必须要检查 CRL,但如果不检查,则他们冒着接受无效身份的风险。 需要注意的是,被撤销的证书与证书过期非常不同。撤销的证书尚未过期,按其他方式来说,它们是完全有效的证书。