中移鏈結合CA證書實現節點准入控制
01
背景介紹
BSN開放聯盟鏈(BSN Open Permissioned Blockchain, 簡稱OPB)包括多條基於公有鏈框架和聯盟鏈框架搭建的公用鏈,開發者可以選擇適合應用業務需求的開放聯盟鏈部署和執行智慧合約和分散式應用,每條開放聯盟鏈各有特點和優勢,均使用類似公有鏈的燃料機制透過人民幣計價,使用方便簡潔。在符合國家監管政策的前提下,實現“開箱即用、快速上鍊”!
中移鏈是由中國移動區塊鏈團隊在EOS基礎上對底層框架進行的改造,在滿足我國資訊化監管需求、合規可控的前提下,打造的中國移動區塊鏈服務平臺,不僅豐富了BSN的技術體系,同時為BSN生態中的企業和開發者使用者提供了更加多元化的技術選擇。
為了適配BSN開放聯盟鏈-公有鏈可按自身框架特點選擇基於信任 BSN根CA統一頒發的節點身份證書,中移鏈基於EOS底層進行改造,在節點之間增加了CA證書認證,同時節點准入配置無需節點重啟,可動態載入,修改後實時生效。
02
技術架構
EOS節點通訊基於P2P網路進行通訊,P2P網路是指由對等節點組成的網路,沒有服務端,客戶端的區別。節點通常採用TCP協議、使用指定埠與相鄰節點建立連線,建立連線時也會有認證 “握手” 的通訊過程(handshake_message)。基於P2P網路的特性,區塊鏈節點可以隨意加入和退出。中移鏈是在EOS基礎上對其底層框架進行改造,完全繼承了EOS所擁有高效能處理能力、易於開發以及使用者免費等優勢。
鑑於P2P網路的特性,無法滿足BSN開放聯盟鏈需要的安全准入原則。因此,中移鏈在P2P節點中加入TLS證書准入機制,透過TLS證書進行私有訪問控制,以控制哪些參與者可以訪問和使用私有中移鏈網路,透過在參與者節點之間建立TLS連線來滿足安全連線要求,只有擁有正確證書的節點才能加入網路,以此完成對接入節點的訪問控制。
整體EOS架構圖如下:
-
BLOCK.LOG
儲存區塊資訊。
-
CHAINBASE/ROCKSDB
記憶體表資訊。
-
FORKDB
用於儲存候選的塊分支。
-
節點之間P2P通訊協議
主要目標是同步有效的塊,轉發交易。本次改造基於NET_PLUGIN外掛,增加TLS證書對P2P節點進行認證。
-
DPOS共識機制
是一種基於投票選舉的共識演算法,類似於代議制民主。在POS的基礎上,DPOS先選舉若干代理人,由代理人驗證和記賬,代理人之間輪流出塊。
-
EOS-VM
負責載入和解析編譯後的智慧合約位元組碼,也就是WASM。
-
WASM
負責執行位元組碼來計算智慧合約執行的結果。
-
ABI
為二進位制介面檔案,用於描述智慧合約的介面資訊。
-
CLEOS
包含NODEOS和KEOSD模組,NODEOS用於節點啟動和管理,KEOSD用於錢包管理。
03
證書與TLS原理介紹
數字證書是指在網際網路通訊中標誌通訊各方身份資訊的一個數字認證,人們可以在網上用它來識別對方的身份,因此數字證書又稱為數字標識。
SSL證書,也稱為伺服器SSL證書,將SSL證書安裝在網站伺服器上,可實現網站身份驗證和資料加密傳輸雙重功能。SSL協議及其繼任者TLS協議,是一種實現網路通訊加密的安全協議,可在客戶端(瀏覽器)和伺服器端(網站)之間建立一條加密通道,保證資料在傳輸過程中不被竊取或篡改。
中移鏈透過TLS證書認證,完成了節點的身份管控,確保只有攜帶正確證書的節點才能進行P2P接入。TLS握手是安全超文字傳輸協議(HTTPS)通訊技術的一部分,本次改造後區塊鏈節點正是使用HTTP和TLS證書進行安全的通訊,整套通訊流程如下:
中移鏈中節點的TLS握手包括以下步驟:
1. 待接入節點會開啟一個TLS認證並連線到鏈主節點。
2. 主節點嘗試透過請求可識別資訊來驗證接入節點的真實性。
3. 待接入節點傳送包含公鑰的TLS證書作為回覆。
4. 主節點會驗證TLS證書,確保其有效且與使用者名稱匹配。主節點對TLS證書驗證透過,會使用公鑰加密併傳送包含金鑰的訊息給接入節點。
5. 待接入節點使用其私鑰解密訊息並檢索會話金鑰,然後使用會話金鑰加密並向鏈主節點傳送確認訊息。
04
中移鏈實現節點准入控制改造
在現有的EOS發行版本中,所有P2P節點接入只有HTTP協議,缺少TLS證書所需環境。在本次改造中引入了OpenSSL庫,該庫包含一個類以及類别範本,主要用於對SSL認證功能的支援。基於SSL庫中流的特點,在區塊鏈進行P2P連線時, P2P套接字會包裝到SSL流中,在已經存在的流上層做了一層加密並構造一個SSL上下文物件,這個物件用於設定SSL認證的引數(如認證模式、認證檔案等)
想要啟用證書驗證功能,只需要在net配置中新增p2p-tls*等引數。在配置這些引數以後,驗證才會啟動,其中p2p-tls-security-group-ca-file為CA中心的認證檔案。所以加入的節點都需要從一個CA認證中心中生成有效TLS證書才能加入P2P網路。
實際使用中,在啟動第一個出塊節點時,可選擇是否啟動准入控制。如下圖,在節點啟動引數中配置了p2p-tls\*等引數以後,引數分別為CA中心認證,由CA中心頒發的節點證書和證書的key。在第一個節點啟動後,系統會檢測p2p-tls*等引數,自動啟動TLS證書校驗。
後續節點需要攜帶相同CA中心頒發的TLS證書才能連線到主鏈進行同步。透過改造EOS的程式碼,增加SSL庫和配置引數解析,中移鏈實現了公鏈對準入控制的改造。
05
節點准入控制驗證
基於中移鏈最新版本,進行了多輪測試。
透過TLS證書進行節點准入控制:
1. 修改node1節點chain.js檔案,加入ca認證中心和node1簽名證書
2. 啟動node1節點
3. 啟動後節點正常出塊
4. 配置node2證書
5. 啟動node2節點
6. node2正常同步塊
06
意義
區塊鏈近年來飛速發展,聯盟鏈在符合我國監管政策要求的前提下,已經為實體經濟所服務。BSN開放聯盟鏈 (Open Permissioned Blockchain) 是一種介於公鏈和聯盟鏈之間的底層框架,具有以下特點:第一開放,所有人可以自由使用;第二聯盟,對區塊鏈網路節點的加入和退出實現管控。中移鏈結合CA證書實現節點准入控制,完成了聯盟鏈改造需求,正式加入開放聯盟鏈佇列。並且相對於公鏈,開放聯盟鏈中的節點數量更少,只需少量節點參與便可完成共識過程,進一步提升交易處理效率。
07
參考連結
BSN開放聯盟鏈:
官方EOSIO基礎介紹:
https://developers.eos.io/welcome/latest/introduction-to-eosio/index
官方EOSIO的CLEOS(命令列工具):
https://developers.eos.io/manuals/eos/latest/cleos/index/?query=cleos&page=1#gatsby-focus-wrapper
官方EOSIO的Net Plugin(網路模組):
https://developers.eos.io/manuals/eos/latest/nodeos/plugins/net_plugin/index/?query=net_plugin&page=1#gatsby-focus-wrapper
亞馬遜SSL/TLS證書介紹:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70012206/viewspace-2936793/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes 兩步驗證 - 使用 Serverless 實現動態准入控制Server
- ca 證書機制
- android 安裝CA證書Android
- 數字證書認證(CA)中心
- 如何在Ubuntu 20.04中配置CA根證書Ubuntu
- 使用 OpenSSL 建立私有 CA:2 中間證書
- etcd管理,證書配置,擴充套件,遷移恢復,帶證書擴充套件節點套件
- PKI/CA與數字證書
- CDN加速域名https中級CA證書的配置HTTP
- 基於CFSSL工具建立CA證書,服務端證書,客戶端證書服務端客戶端
- CA數字證書包括哪些內容?
- 使用 OpenSSL 建立私有 CA:1 根證書
- 在K8S中,Pod 如何實現對節點的資源控制?K8S
- go-自籤ca證書,客戶端數字證書,服務端數字證書Go客戶端服務端
- 中移鏈控制檯對接4A平臺功能驗證介紹
- SGS為中移國際及中移香港頒發首張ISO 37301合規管理體系認證證書
- Vue結合Django-Rest-Frameword結合實現登入認證(二)VueDjangoREST
- Vue結合Django-Rest-Frameword結合實現登入認證(一)VueDjangoREST
- ca證書怎樣理解?與恆訊科技的ssl證書一樣嗎?
- 配置docker和containerd,使用ca證書訪問harborDockerAI
- https--OpenSSL生成root CA及簽發證書HTTP
- 使用 OpenSSL 建立私有 CA:3 使用者證書
- Windows證書管理中的安全漏洞,保護系統免受中間人攻擊、偽造證書和其他網路安全威脅。CA信任鏈的管理、證書撤銷機制、證書頒發過程中的人為錯誤。Windows
- 關於SSL證書之證書鏈
- 搞懂 Kubernetes 准入控制(Admission Controller)Controller
- 03-【Kubernetes理論知識】kubernetes認證、授權、准入控制
- Kubernetes客戶端認證——基於CA證書的雙向認證方式客戶端
- 使用OpenSSL建立生成CA證書、伺服器、客戶端證書及金鑰伺服器客戶端
- 通過Go語言建立CA與簽發證書Go
- 自己成為一個證書頒發機構(CA)
- 區塊鏈全節點的JavaScript實現:Bcoin 入門 - pradyuman區塊鏈JavaScript
- Qt實現表格樹控制元件-自繪樹節點虛線QT控制元件
- Kubernetes 准入控制 Admission Controller 介紹Controller
- 利用遞迴方法實現連結串列反轉、前N個節點反轉以及中間部分節點反轉遞迴
- 建立和管理一個 CA 及證書的生命週期
- 申請SSL證書CA機構的選擇很重要
- fabric-ca載入openssl生成的ecdsa標準證書
- Vue中結合clipboard實現複製功能Vue