联盟链–准入控制

 目录

1.准入控制

2.准入机制

3.CA

4.数字证书(certificate)

4.1数字证书的基本密码学原理

4.1.1数字证书

4.1.2非对称加密

4.1.3摘要算法

4.1.4数字签名

4.1.5证书格式

4.1.6证书扩展名

4.1.8证书生成算法

4.2数字证书的具体实现

4.2.1创建CA

4.2.2颁发证书

1.准入控制

顾名思义准入控制是联盟链对要加入链的节点的身份审核和验证,通过准入控制部分实现对节点的入链管理。

为什么要准入控制?原因如下:

1.联盟链承载的业务复杂度可能超越数字资产转让,即使是同一个商业场景里的不同业务流程,能参与和应该参与的人也可能不一样;
2.基于商业的上的隐私和安全考虑,要求对不同的人能做的操作、和能访问的范围进行区别对待;
3.企业级生产环境对稳定性要求很高,运维升级操作特别谨慎,根据DO分离的基本思想,开发和运维的活动需要分开,再进一步:参与交易的,负责运营的,需要各司其职;
4.可能有监管、委员会、治理人员等特殊身份存在,需要为这些特殊身份定制不一样的操作能力,这些能力不能赋予普通用户使用。

在支持智能合约的区块链平台里,准入控制可以控制某个用户的以下行为:

1.能否部署合约。杜绝没有被审核过的合约发布到链上和被执行。
2.能否调用某个合约。合约代表了一些系统能力或业务流程,如果不能调用某个合约的某个接口,那么这个用户就无法实现系统配置,系统控制,或者参与智能合约实现的业务交易流程。

2.准入机制

联盟链中的准入机制通过CA(Certification Authority)中心来实现。

第三方可信CA机构(如CFCA等)可以实现数字证书管理功能,满足对于证书系统安全性与权威性有较高要求的银行或金融机构的需求。

自建CA体系通过建设独立的PKI/CA系统,需建立完整的运营管理体系,运维成本较高。

3.CA

CA,Certification Authority,是一个具有权威性的证书颁发中心,主要功能是可以颁发该权威中心所认证的一段时间内有效的数字证书,除此之外证书权威中心还可以进行证书吊销、证书续签、证书验证等一系列操作。

CA中心功能图如下:

 

 

4.数字证书(certificate)

谈到数字证书就涉及到数字证书的基本密码学原理以及具体实现,下面分原理和实现两部分来展开数字证书部分的内容。

4.1数字证书的基本密码学原理

4.1.1数字证书

数字证书是一个经证书授权中心数字签名,包含公开密钥拥有者信息以及公开密钥的文件,最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。简单来说,数字证书就是一张附带了数字签名的信息表。

数字签名结构图:

4.1.2非对称加密

  • 例如:有两个密钥,一个是Key_1,另一个是Key_2
  • 一段明文通过某种加密算法用 Key_1 加密之后的密文只能用 Key_2 解密,而不能还是用 Key_1 解密。
  • 反过来,明文用 Key_2 加密之后的密文只能用 Key_1 解密,而不能还是用 Key_2 解密。

满足这种特征的加密算法称为非对称加密算法,目前常用的非对称加密算法有 RSA、DSA 等。

4.1.3摘要算法

将各种不定长的数据经过某种算法处理之后,总是能生成一段定长的数据,这段定长的数据称之为散列值。这种算法如果可以满足以下特征,则可以称为摘要算法。

  • 可以轻松地将各种不定长的数据生成散列值。
  • 不能通过散列值来反推出原数据。
  • 不能找出具有相同散列值的另一个数据。

目前常用的摘要算法有 MD5、SHA-1、SHA-256 等。

4.1.4数字签名

数字签名其实就是把散列值经过非对称加密算法加密得到的一个加密的散列值。

它将报文按双方约定的 HASH 算法,计算得到一个固定位数的报文摘要。将该报文摘要值用发送者的私人密钥加密,然后连同原报文一起发送给接收者,而产生的报文即称数字签名。只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符,这样就保证了报文的不可更改性,具有鉴权、完整性、不可抵赖特点,一般用于身份认证和防止抵赖。

数字签名工作流程图如下:

4.1.5证书格式

X.509 标准的证书文件具有不同的编码格式,一般包括 PEM 和 DER 两种。

1)PEM

Privacy Enhanced Mail 的缩写,以文本的方式进行存储。它的文件结构以 -----BEGIN XXX-----,并以 -----END XXX----- 结尾,中间 Body 内容为 Base64 编码过的数据。例如:

-----BEGIN CERTIFICATE

----- Base64 编码过的证书数据

-----END CERTIFICATE-----

通过 OpenSSL 命令可以查看其证书内容:

openssl x509 -in xxx.pem -text -noout

它也可以用来编码存储公钥(RSA PUBLIC KEY)、私钥(RSA PRIVATE KEY)、证书签名请求(CERTIFICATE REQUEST)等数据,一般 Apache 和 Nginx 服务器应用偏向于使用 PEM 这种编码格式。

2)DER

Distinguished Encoding Rules 的缩写,以二进制方式进行存储,文件结构无法直接预览,同样可以通过 OpenSSL 命令查看其证书内容:

openssl x509 -in xxx.der -inform der -text -noout

一般 Java 和 Windows 服务器应用偏向于使用 DER 这种编码格式。

当然同一 X.509 证书的不同编码之间可以互相转换:

3)PEM 转为 DER

openssl x509 -in xxx.pem -outform der -out xxx.der

4)DER 转为 PEM

openssl x509 -in xxx.der -inform der -outform pem -out xxx.pem

4.1.6证书扩展名

证书文件扩展名是比较误导人的地方,如上所述,对于 X.509 标准的证书两种不同编码格式,一般采用 PEM 编码就以 .pem 作为文件扩展名,若采用 DER 编码,就应以 .der 作为扩展名。

但常见的证书扩展名还包括 .crt、.cer、.p12 等,他们采用的编码格式可能不同,内容也有所差别,但大多数都能互相转换,总结如下:


.pem:采用 PEM 编码格式的X.509 证书的文件扩展名;
.der:采用 DER 编码格式的X.509 证书的文件扩展名;
.crt:即 certificate 的缩写,常见于类 UNIX 系统,有可能是 PEM 编码,也有可能是 DER 编码,但绝大多数情况下此格式证书都是采用 PEM 编码;
.cer:也是 certificate 的缩写,常见于 Windows 系统,同样地,可能是 PEM 编码,也可能是 DER 编码,但绝大多数情况下此格式证书都是采用 DER 编码;
.p12:也写作 .pfx,全称:PKCS #12,是公钥加密标准(Public Key Cryptography Standards,PKCS)系列的一种,它定义了描述个人信息交换语法(Personal Information Exchange Syntax)的标准,可以用来将包含了公钥的 X.509 证书和证书对应的私钥以及其他相关信息打包,进行交换。简单理解:p12 文件 = X.509 证书+私钥
.csr:Certificate Signing Request 的缩写,即证书签名请求,它并不是证书的格式,而是用于向权威证书颁发机构(Certificate Authority, CA)获得签名证书的申请,其核心内容包含一个 RSA 公钥和其他附带信息,在生成这个 .csr 申请的时候,同时也会生成一个配对 RSA 私钥,私钥通常需要严格保存于服务端,不能外泄。
.key:通常用来存放一个 RSA 公钥或者私钥,它并非 X.509 证书格式,编码同样可能是 PEM,也可能是 DER。

4.1.7证书信任链

证书是可以有信任关系的,通过一个证书可以证明另一个证书也是真实可信的。实际上,证书之间的信任关系,是可以嵌套的。只要你信任链上的头一个证书,那后续的证书,都是可以信任的。

比如 C 证书信任 A 和 B,然后 A 信任 A1 和 A2,B 信任 B1 和 B2。则它们之间,构成如下的一个树形关系(一个倒立的树)。

处于最顶上的树根位置的那个证书,就是“根证书”。除了根证书,其它证书都要依靠上一级的证书,来证明自己。那谁来证明“根证书”可靠?实际上,根证书自己证明自己是可靠的(或者换句话说,根证书是不需要被证明)。

根证书是整个证书体系安全的根本。所以,如果某个证书体系中,根证书出了问题(不再可信了),那么所有被根证书所信任的其它证书,也就不再可信了。

4.1.8证书生成算法

以 RSA 证书为例进行说明,其他算法的证书可能会有所不同。

1)构建认证机构,签署数字证书

1.1)根认证机构

构建

 

证书签署

 

1.2)二级及以上认证机构

构建

 

证书签署

 

2)客户端验证服务器的身份

2.1)单级认证机构的验证

 

2.2)二级及以上认证机构的验证

 

4.2数字证书的具体实现

4.2.1创建CA

1)安装openssl

[root@localhost ~]# yum install -y openssl

 2)创建CA的相关文件及目录

mkdir /opt/root_ca &&   
cd root_ca &&   
mkdir newcerts private crl &&   
touch index.txt &&   
touch serial &&   
echo 01 >serial &&

说明:
   #newcerts目录用于存放CA签署(颁发)过的数字证书(证书备份目录)。
   #private目录用于存放CA的私钥。
   #文件serial和index.txt分别用于存放下一个证书的序列号和证书信息数据库。
   #文件serial填写第一个证书序列号(如10000001),之后每前一张证书,序列号自动加1。

3)修改openssl配置文件

vim /etc/pki/tls/openssl.cnf 
[ CA_default ] 
dir = /opt/root_ca 
[ policy_match ] 
countryName = match 
stateOrProvinceName = optional 
organizationName = optional 
organizationalUnitName = optional 
commonName = supplied 
emailAddress = optional

说明:   
match   表示严格校验国家名称   
optional 表示可选   
这个“匹配”指的是在颁发证书的时候,检查请求中的信息是否和根证书中所对应的信息匹配;
加粗的部分为需要修改的配置,具体配置根据实际情况修改

 4)生成CA私钥

[root@localhost root_ca]# openssl genrsa -out private/ca.key

5)使用私钥生成CA请求信息

[root@localhost root_ca]# openssl req -new -key private/ca.key -out ca.csr

6)使用CA私钥和证书请求,生成CA根证书

[root@localhost root_ca]# openssl x509 -req -days 3650 -in ca.csr -signkey private/ca.key -out ca.crt

4.2.2颁发证书

1)生成私钥

[root@localhost root_ca]# openssl genrsa -out server.key

2)生成请求

[root@localhost root_ca]# openssl openssl req -new -key server.key -out server.csr

3)颁发证书

[root@localhost root_ca]# openssl ca -in server.csr -cert /opt/root_ca/ca.crt -keyfile /opt/root_ca/private/ca.key -out server.crt -days 3650

参考以下文章:

​​​​​​X.509 数字证书的基本原理及应用 - 知乎

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>