目錄
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 數字證書的基本原理及應用 - 知乎
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/392203.html
標籤:區塊鏈
