计划要写一系列关于Hyperledger Fabric开发相关的技术文章,基于版本Fabric v1.2.0,面向有一定区块链开发基础的编程人员,侧重标准和规范方面,如果您有任何疑问、建议,欢迎通过公众号下方回复!这是系列的第三篇,关于数字证书和CA。
0x00 引子
我们可能多少都了解一些关于HTTPS/SSL的数字证书,打开浏览器设的「证书管理」设置,我们可以看到这是一系列网站证书的列表,
更进一步,可以看到证书详细信息以及颁发机构,
当客户端发送HTTPS请求服务器时,服务器会用自己的私钥加密的网页内容,连同数字证书本身,一起发给客户端「浏览器」,这个数字证书是由受信任机构颁发的,是可靠的,客户端使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。
0x01 数字证书
上面所说的就是一个数字证书的实例,企业将公钥和一些相关信息一起加密,然后送给证书颁发机构,数字证书颁发机构用自己的私钥将上面企业提供的数据进行加密,就是数字证书「Digital Certificate」,客户端用数字证书颁发机构的公钥解开数字证书就可以得到企业的公钥了,数字证书是企业自己身份的凭证。
0x02 数字签名
为什么一个公钥就可以证明身份呢,这需要了解数字签名「Digital Signature」,而说到数字签名,就不得不先说说非对称加密算法,密码学里面通常说的加密算法分为「对称加密算法」和「非对称加密算法」,对称加密算法的解释,
甲方选择某一种加密规则,对信息进行加密
乙方使用同一种规则,对信息进行解密
非对称加密算法的解释,
乙方生成两把密钥(公钥和私钥),公钥公开,私钥则保密
甲方获取乙方的公钥,然后用它对信息加密
乙方得到加密后的信息,用私钥解密
而「数字签名」是使用私钥加密,公钥解密,是非对称加密算法的逆向使用,「数字签名」的现实意义,等效于现实中的签名,具有法律效应,数字签名与加密算法属于密码学范畴,后面会有专门文章说明。
0x03 CA
发行证书机构,称为「Certificate Authority」,简称「CA」,通过以上的了解,我们知道,数字证书颁发机构是受信任的第三方机构,颁发的数字证书为最终用户数据加密的公共密钥,也就是证明公钥的所有权的机构,那为什么需要这样的一个信任机构呢?假设A企业用数字签名后把公钥发给用户C,用户C用公钥解密得到A企业发给他的内容,有一个问题,怎么确定A企业发给C用户的公钥确实是由A企业发出来的,中间会不会被调换,假设B企业把自己签名以及内容发给C用户,谎称自己是A企业,用户C在使用B的公钥进行解密后仍然可以得到内容,而实际上得到但内容就是B的,并不是A的,是伪造的,C用户没有办法鉴定公钥但真实性,这个时候就需要权威机构的这个角色来公正A企业的真实性。
拿SSL证书来说,全球市场上约50个SSL证书颁发机构,比较著名的有Comodo
、Symantec(收购了VeriSign)、Go Daddy、GlobalSign,而后来DigiCert接管了所有赛门铁克网站安全SSL/TLS证书的验证和颁发,下面的机构排行是来自今年5月份W3Techs的一份调查,
0x04 CA根证书
根证书 「Root Certificate」 是属于根证书颁发机构的公钥证书,是CA认证中心给自己颁发的证书,是信任链的起始点,如 Google、Lets Encrypt、CAcert.org、Comodo、DigiCert、GlobalSign、Verisign,12306也购买了DigiCert的根证书,这件事情在网上也引发起了很热烈的讨论。
0x05 CA与浏览器之争
通过上面的了解我们知道CA机构掌握「生杀大权」,那如果CA机构自身乱发证书或者CA机构遭到黑客攻击而导致证书泄露怎么办?
2011年3月,证书市场份额前列的科摩多(Comodo) 公司遭黑客入侵,同年,荷兰的 CA 机构 DigiNotar 同样遭到了黑客入侵,颁发了大量的伪造证书;
2013年“棱镜门事件”爆发,斯诺登泄露的文件中透露:美国国家安全局就利用一些 CA 颁发的伪造SSL证书,截取和破解了大量 HTTPS 加密网络会话;
2015年4月,谷歌和火狐浏览器都宣布不再信任中国CNNIC数字证书;
2015年12月,Google发布公告称Chrome、Android及其他Google产品将不再信任赛门铁克(Symantec)旗下的"Class 3 Public Primary CA"根证书
以上也是CA和浏览器之间恩怨的起因,CA做为一种中心化的机构,无法避免中间作恶以及安全的问题,而数字证书对企业来说尤为重要,这种身份的凭证一旦遭到篡改将会给企业带来无法估量的损失,Google的Chrome起到了对CA的监督作用,但是,随着Google 也在 2016 年的年底推出了自己的根证书,这项举动被称为「即当运动员又当裁判员」的做法也受到了外界质疑。
0x06 Fabric MSP
Fabirc的成员身份基于标准的X.509证书,密钥使用的是ECDSA算法,利用PKI体系给每个成员颁发数字证书,MSP的结构,
MSP证书及其签名密钥的生成,可以通过Openssl,在Fabric中,有两种方式可以生成,第一种方式是Fabric下自带的cryptogen工具「channel相关的MSP可以使用configtxgen生成」,这种方式有一个不足,需要根据设定的配置文件「org以及其他成员」来生成对应的证书,在Blockchain网络启动时,再把对应的证书拷贝到相应的位置「相应的容器中」;另外一种方式就是使用Fabric CA,Fabric CA是可插拔式的模块,这是Fabric「modular」的一种体现,当然也可以使用外部的CA,通过API来管理MSP。
0x07 Fabric CA
Fabric支持多种证书架构,允许使用多种外部CA的接口,因此Fabric网络可以由多个MSP控制,每个组织可以选择自己喜好的方式,而Fabric CA是Hyperledger Fabric的证书颁发机构,也是MSP默认的接口方式,
Fabric CA除了为实体颁发证书之外,很重要的两个作用,
颁发登录证书(ECerts);
颁发交易证书(TCerts),保证链上交易的匿名性与不可连接性;
截止v1.2release版本,只实现了ECerts,之前写过一篇文章「Fabric 1.0.0 Step By Step - Alpha 2」,其中第6节中有对Fabric CA开发做过详细说明,您可以查找公众号历史参照。
0x08 小结
Fabric CA是整个Fabric中最复杂的模块,虽然CA的设计从0.6版本的网络中被解藕出来做为可插拔的模块,但是做为Permissioned Blockchain,CA仍然非常重要。
领取专属 10元无门槛券
私享最新 技术干货