1. 程式人生 > >Hyperledger Fabric手動生成CA證書搭建Fabric網路

Hyperledger Fabric手動生成CA證書搭建Fabric網路

之前介紹了使用官方指令碼自動化啟動一個Fabric網路,並且所有的證書都是通過官方的命令列工具cryptogen直接生成網路中的所有節點的證書。在開發環境可以這麼簡單進行,但是生成環境下還是需要我們自定義對網路中的節點的證書進行配置。
所以在本文中,將會詳細介紹一個從手動生成證書一直到啟動網路的整體步驟。本文只交代整體的搭建步驟。對於Fabric-Ca的講解不在本文的範圍內,將在另一篇文章中說明。
正篇文章也是根據官方的文件進行的。但是由於官方的文件尚未完工,也是好多沒有交代清楚的,並且有些地方是錯誤的,所以筆者也是一步一步摸索出來的,所以如果本文哪裡沒有交代清楚或者錯誤的地方,希望各位批評指正。
在這裡貼出官方文件地址.

1.整體架構


架構圖直接貼過來好了:

官方文件採用的是多機環境,這裡簡潔化一點,所有的操作都在一臺機器上進行,至於多機環境,以後再補充好了。
介紹一下本文所採用的整體架構:

  1. 三個組織
    1. Org0 -> 組織0
    2. Org1 -> 組織1
    3. Org2 -> 組織2
  2. 組織中的成員
    1. Org0 一個Orderer節點,一個Org0的Admin節點
    2. Org1 兩個Peer節點,一個Org1的Admin節點,一個Org1的User節點
    3. Org2 兩個Peer節點,一個Org2的Admin節點,一個Org2的User節點
  3. 共有四臺CA伺服器
    1. TLS伺服器 -> 為網路中所有節點頒發TLS證書,用於通訊的加密
    2. Org1的CA伺服器 -> 為組織1中所有使用者頒發證書
    3. Org2的Ca伺服器 -> 為組織2中所有使用者頒發證書
    4. Org0的CA伺服器 -> 為組織0中所有使用者頒發證書

這裡的四臺CA伺服器都是根伺服器。彼此之間都是獨立的存在,沒有任何關係。,也就是說每一個CA伺服器生成的證書在其他CA伺服器都是不能用的。
介紹完之後,可以進入正題了。

1.1Fabric,Fabric-Ca安裝

本文預設讀者都是對Fabric有一定的瞭解的,所以一些安裝過程這裡就沒有重複說明。
第一步是安裝Fabric-Ca環境,可以參考這裡,這篇文章還沒有寫完,以後慢慢補,不過環境的安裝已經有說明。
還有就是Fabric的環境安裝,可以參考這裡。

完成環境搭建後,我們還需要一個HOME資料夾,用於存放我們生成的證書檔案與fabric配置相關的檔案。
本文設定HOME資料夾路徑為:

$GOPATH/src/github.com/caDemo/

請讀者自行建立,一般不要用太複雜的路徑,也不要用中文路徑,會為之後的操作帶來很多麻煩。在下文中簡單稱HOME資料夾為工作目錄,除非特殊說明,一般命令的執行都是在工作目錄進行。

2 CA伺服器配置


2.1啟動TLS CA伺服器

前期工作準備好之後,我們開始啟動第一臺CA伺服器。本文中使用Docker容器啟動。
首先在工作目錄建立docker-compose.yaml檔案:

touch docker-compose.yaml

並在檔案內新增以下內容(tips:內容格式不要亂掉):

version: '2'

networks:
  fabric-ca:
  
services:
  
  ca-tls:
    container_name: ca-tls
    image: hyperledger/fabric-ca
    command: sh -c 'fabric-ca-server start -d -b tls-ca-admin:tls-ca-adminpw --port 7052'
    environment:
      - FABRIC_CA_SERVER_HOME=/ca/tls
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=ca-tls
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
    volumes:
      - $GOPATH/src/github.com/caDemo:/ca  ##重要!!!記得修改這裡的路徑為自己的工作目錄
    networks:
      - fabric-ca
    ports:
      - 7052:7052
      

啟動該docker容器:

docker-compose -f docker-compose.yaml up ca-tls

如果命令列出現以下內容則說明啟動成功:

[INFO] Listening on https://0.0.0.0:7052

同時工作目錄下會出現一個tls的資料夾。資料夾中的內容暫先不解釋,留著在另一篇文章中說明。不過有一個檔案需要解釋一下,因為之後會用到。
$GOPATH/src/github.com/caDemo/tls/路徑下的ca-cert.pem檔案。這是TLS CA伺服器簽名的根證書,目的是用來對CATLS證書進行驗證,同時也需要持有這個證書才可以進行證書的頒發。在多機環境下,我們需要將它複製到每一臺機器上,不過本文采用的是單機環境,所以省略掉了這一步。

2.2 TLS CA伺服器註冊使用者

第一步是在TLS CA伺服器中註冊使用者,經過註冊的使用者才擁有TLS證書,本文中由於只在各節點之間進行TLS加密通訊,所以只將ordererpeer節點的身份註冊到TLS伺服器。
開啟一個新的終端輸入以下命令:

#設定環境變數指定根證書的路徑(如果工作目錄不同的話記得指定自己的工作目錄,以下不再重複說明)
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/tls/ca-cert.pem
#設定環境變數指定CA客戶端的HOME資料夾
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/tls/admin
#登入管理員使用者用於之後的節點身份註冊
fabric-ca-client enroll -d -u https://tls-ca-admin:[email protected]:7052

登入成功在工作目錄下的tls資料夾下將出現一個admin資料夾,這裡面是admin的相關證書檔案.
並且只有登入了admin,才具有許可權進行使用者的註冊,因為該使用者具有CA的全部許可權,相當於CA伺服器的root使用者。
接下來對各個節點進行註冊。

fabric-ca-client register -d --id.name peer1-org1 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer2-org1 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer1-org2 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer2-org2 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name orderer-org0 --id.secret ordererPW --id.type orderer -u https://0.0.0.0:7052

這裡將三個組織中的節點都進行了註冊。

  • 不過-d這個引數並沒有找到相關資料
  • id.name是指定使用者的名稱
  • --id.secert是指定密碼
  • --id.type是指定使用者型別,使用者型別預設為client,主要包括peer,app,user,orderer.
  • -u則是指定請求CA伺服器的URL。

這裡我們為各個節點註冊TLS證書,之後Fabric網路的通訊則需要通過這一步驟註冊過的使用者的TLS證書來進行TLS加密通訊。
到這裡我們只是註冊了各個節點的身份,還沒有獲取到他們的證書。證書可以通過登入獲取,不過暫時不著急獲取他們的TLS證書。
接下來,我們對其他幾個CA伺服器進行配置。

2.3配置Org0的CA伺服器

再強調一下,本文中的幾個CA伺服器都是根伺服器,彼此之間沒有任何關係,所以上一步驟的TLS CA伺服器在這一部分並沒有用到。
同樣,本文使用Docker容器啟動CA伺服器。配置檔案如下,只需要新增進之前的docker-compose.yaml檔案中就好:

  org0:
    container_name: org0
    image: hyperledger/fabric-ca
    command: /bin/bash -c 'fabric-ca-server start -d -b org0-admin:org0-adminpw --port 7053'
    environment:
      - FABRIC_CA_SERVER_HOME=/ca/org0/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=org0
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
    volumes:
      - $GOPATH/src/github.com/caDemo:/ca
    networks:
      - fabric-ca
    ports:
      - 7053:7053
      

新增完之後啟動它:

docker-compose -f docker-compose.yaml up org0

開啟另一個終端,接下來註冊org0的使用者:

#首先指定環境變數,這裡的TLS證書不是之前的TLS CA伺服器的根證書,而是本組織CA伺服器啟動時生成的TLS根證書
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org0/crypto/ca-cert.pem
#指定本組織的CA客戶端工作目錄
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org0/admin

登入org0的CA伺服器管理員身份用於註冊本組織的使用者:

fabric-ca-client enroll -d -u https://org0-admin:[email protected]:7053

在本組織中共有兩個使用者:orderer節點和admin使用者(這裡的admin和管理員是不同的。)
將他們註冊到org0的CA伺服器:

fabric-ca-client register -d --id.name orderer-org0 --id.secret ordererpw --id.type orderer -u https://0.0.0.0:7053
fabric-ca-client register -d --id.name admin-org0 --id.secret org0adminpw --id.type admin --id.attrs "hf.Registrar.Roles=client,hf.Registrar.Attributes=*,hf.Revoker=true,hf.GenCRL=true,admin=true:ecert,abac.init=true:ecert" -u https://0.0.0.0:7053

命令執行完之後,將會註冊一個Orderer節點的身份和一個Admin的身份。同時在工作目錄下的org0子資料夾中會有兩個資料夾:cryptoadmincrypto中是CA伺服器的配置資訊,admin是伺服器管理員的身份資訊。

2.4配置Org1的CA伺服器

同樣的步驟,對org1組織的CA伺服器進行配置:

  org1:
    container_name: org1
    image: hyperledger/fabric-ca
    command: /bin/bash -c 'fabric-ca-server start -d -b org1-admin:org1-adminpw'
    environment:
      - FABRIC_CA_SERVER_HOME=/ca/org1/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=org1
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
    volumes:
      - $GOPATH/src/github.com/caDemo:/ca
    networks:
      - fabric-ca
    ports:
      - 7054:7054
      

啟動伺服器:

docker-compose -f docker-compose.yaml up org1

開啟新的終端,配置環境變數:

export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org1/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org1/admin

登入CA伺服器管理員身份:

fabric-ca-client enroll -d -u https://org1-admin:[email protected]:7054

組織一種共有四個使用者:peer1,peer2,admin,user,分別註冊他們:

fabric-ca-client register -d --id.name peer1-org1 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7054
fabric-ca-client register -d --id.name peer2-org1 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7054
fabric-ca-client register -d --id.name admin-org1 --id.secret org1AdminPW --id.type user -u https://0.0.0.0:7054
fabric-ca-client register -d --id.name user-org1 --id.secret org1UserPW --id.type user -u https://0.0.0.0:7054

2.5配置Org2的CA伺服器

和上一部分相同,這裡只列舉需要的命令:
CA伺服器配置檔案:

  org2:
    container_name: org2
    image: hyperledger/fabric-ca
    command: /bin/bash -c 'fabric-ca-server start -d -b org2-admin:org2-adminpw --port 7055'
    environment:
      - FABRIC_CA_SERVER_HOME=/ca/org2/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=org2
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
    volumes:
      - $GOPATH/src/github.com/caDemo:/ca
    networks:
      - fabric-ca
    ports:
      - 7055:7055
      

啟動伺服器:

docker-compose -f docker-compose.yaml up org2

開啟新的終端,配置環境變數:

export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org2/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org2/admin

登入CA伺服器管理員身份:

fabric-ca-client enroll -d -u https://org2-admin:[email protected]:7055

組織一種共有四個使用者:peer1,peer2,admin,user,分別註冊他們:

fabric-ca-client register -d --id.name peer1-org2 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7055
fabric-ca-client register -d --id.name peer2-org2 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7055
fabric-ca-client register -d --id.name admin-org2 --id.secret org1AdminPW --id.type user -u https://0.0.0.0:7055
fabric-ca-client register -d --id.name user-org2 --id.secret org1UserPW --id.type user -u https://0.0.0.0:7055

3.生成證書並配置TLS


到目前為止,所有的使用者我們都註冊完畢,接下來就是為每一個使用者生成證書並配置TLS證書。
其中證書分為兩部分,分別是本組織的MSP證書,以及組織之間進行加密通訊的TLS證書。
所以本文需要對兩部分證書進行分別生成與配置。
從組織一開始:

3.1 組織一節點配置

3.1.1 peer1

首先是本組織的MSP證書:

  • 配置環境變數
#指定peer1節點的HOME目錄
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org1/peer1
#指定**本**組織的TLS根證書
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org1/crypto/ca-cert.pem
  • 登入peer1節點到org1 CA伺服器上:
fabric-ca-client enroll -d -u https://peer1-org1:[email protected]:7054

這一步完成後,在$GOPATH/src/github.com/caDemo/org1/peer1下會出現一個msp資料夾,這是peer1節點的MSP證書。
接下來是TLS證書:

  • 配置環境變數
#指定TLS CA伺服器生成的TLS根證書
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/tls/ca-cert.pem
#指定TLS證書的HOME目錄
export FABRIC_CA_CLIENT_MSPDIR=$GOPATH/src/github.com/caDemo/org1/peer1/tls-msp
  • 登入peer1節點到TLS CA伺服器上:
fabric-ca-client enroll -d -u https://peer1-org1:[email protected]:7052 --enrollment.profile tls --csr.hosts peer1-org1

這一步完成後,在$GOPATH/src/github.com/caDemo/org1/peer1下會出現一個tls-msp資料夾,這是peer1節點的TLS證書。

  • 修改祕鑰檔名
    為什麼要修改呢,進入這個資料夾看一下就知道了,由伺服器生成的祕鑰檔名是一長串無規則的字串,後期我們使用的時候難道要一個字元一個字元地輸入?
cd $GOPATH/src/github.com/caDemo/org1/peer1/tls-msp/keystore/
mv *_sk key.pem
#修改完回到工作目錄
cd $GOPATH/src/github.com/caDemo

3.1.2 peer2

peer2節點和上面步驟相同:
這裡就直接放需要的命令了:

  • 生成MSP證書
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org1/peer2
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org1/crypto/ca-cert.pem
fabric-ca-client enroll -d -u https://peer2-org1:[email protected]:7054
  • 生成TLS證書
export FABRIC_CA_CLIENT_MSPDIR=$GOPATH/src/github.com/caDemo/org1/peer2/tls-msp
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/tls/ca-cert.pem
fabric-ca-client enroll -d -u https://peer2-org1:[email protected]:7052 --enrollment.profile tls --csr.hosts peer2-org1
cd $GOPATH/src/github.com/caDemo/org1/peer2/tls-msp/keystore/
mv *_sk key.pem

3.1.3 admin

接下來是admin使用者,這個使用者有什麼作用呢,實際上,安裝和例項化鏈碼都需要admin的證書,所以才需要註冊一個admin使用者,還要它的證書。

  • 配置環境變數
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org1/adminuser
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org1/crypto/ca-cert.pem
#這裡多了一個環境變數,是指定admin使用者的msp證書資料夾的
export FABRIC_CA_CLIENT_MSPDIR=$GOPATH/src/github.com/caDemo/org1/adminuser/msp
  • 登入admin使用者獲取MSP證書:
fabric-ca-client enroll -d -u https://admin-org1:[email protected]:7054

因為我們生成這個使用者的證書主要就是為了之後鏈碼的安裝和例項化,所以配不配置他的TLS證書也無關緊要了(關鍵是我們之前也沒有將這個使用者註冊到tls伺服器中)

  • 複製證書到admincerts資料夾:
    去看Fabric官方的例子,每一個peer節點的MSP資料夾下都有admincerts這個子資料夾的,而且是需要我們手動建立的。
mkdir -p $GOPATH/src/github.com/caDemo/org1/peer1/msp/admincerts
#將簽名證書拷貝過去
cp $GOPATH/src/github.com/caDemo/org1/adminuser/msp/signcerts/cert.pem $GOPATH/src/github.com/caDemo/org1/peer1/msp/admincerts/org1-admin-cert.pem
#回到工作目錄
cd $GOPATH/src/github.com/caDemo/

3.1.4 啟動peer節點

到這裡,已經配置好了一個節點,所以我們就可以啟動這個節點了,當然在之後和orderer節點一起啟動也可以,不過忙活了這麼多,還是應該提前看到一下所做的工作的成果的!
附上peer1節點的容器配置資訊:

  peer1-org1:
    container_name: peer1-org1
    image: hyperledger/fabric-peer
    environment:
      - CORE_PEER_ID=peer1-org1
      - CORE_PEER_ADDRESS=peer1-org1:7051
      - CORE_PEER_LOCALMSPID=org1MSP
      - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/peer1/msp
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=cademo_fabric-ca
      - FABRIC_LOGGING_SPEC=debug
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/signcerts/cert.pem
      - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org1/peer1/tls-msp/keystore/key.pem
      - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org1:7051
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org1/peer1
    volumes:
      - /var/run:/host/var/run
      - $GOPATH/src/github.com/caDemo/org1/peer1:/tmp/hyperledger/org1/peer1
    networks:
      - fabric-ca
      

啟動它!!

docker-compose -f docker-compose.yaml up peer1-org1

如果沒有報錯的話,說明之前配置的沒有什麼問題,如果出錯的話,則需要返回去檢查一下了。。。
peer2節點的容器配置資訊:

  peer2-org1:
    container_name: peer2-org1
    image: hyperledger/fabric-peer
    environment:
      - CORE_PEER_ID=peer2-org1
      - CORE_PEER_ADDRESS=peer2-org1:8051
      - CORE_PEER_LOCALMSPID=org1MSP
      - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/peer2/msp
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=cademo_fabric-ca
      - FABRIC_LOGGING_SPEC=debug
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org1/peer2/tls-msp/signcerts/cert.pem
      - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org1/peer2/tls-msp/keystore/key.pem
      - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer2/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org1:7051
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org1/peer2
    volumes:
      - /var/run:/host/var/run
      - $GOPATH/src/github.com/caDemo/org1/peer2:/tmp/hyperledger/org1/peer2
    networks:
      - fabric-ca
      

啟動它!!

docker-compose -f docker-compose.yaml up peer2-org1

3.2 組織二節點配置

和之前一樣的步驟,所以沒什麼好解釋的了:

3.2.1 peer1

  • 配置環境變數
#指定peer2節點的HOME目錄
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org2/peer1
#指定本組織的TLS根證書
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org2/crypto/ca-cert.pem
  • 登入peer1節點到org2 CA伺服器上:
fabric-ca-client enroll -d -u https://peer1-org2:[email protected]:7055

接下來是TLS證書:

  • 配置環境變數
#指定TLS CA伺服器生成的TLS根證書
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/tls/ca-cert.pem
#指定TLS證書的HOME目錄
export FABRIC_CA_CLIENT_MSPDIR=$GOPATH/src/github.com/caDemo/org2/peer1/tls-msp
  • 登入peer1節點到TLS CA伺服器上:
fabric-ca-client enroll -d -u https://peer1-org2:[email protected]:7052 --enrollment.profile tls --csr.hosts peer1-org2
  • 修改祕鑰檔名
cd $GOPATH/src/github.com/caDemo/org2/peer1/tls-msp/keystore/
mv *_sk key.pem
#修改完回到工作目錄
cd $GOPATH/src/github.com/caDemo

3.2.2 peer2

  • 生成MSP證書
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org2/peer2
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org2/crypto/ca-cert.pem
fabric-ca-client enroll -d -u https://peer2-org2:[email protected]:7055
  • 生成TLS證書
export FABRIC_CA_CLIENT_MSPDIR=$GOPATH/src/github.com/caDemo/org2/peer2/tls-msp
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/tls/ca-cert.pem
fabric-ca-client enroll -d -u https://peer2-org2:[email protected]:7052 --enrollment.profile tls --csr.hosts peer2-org2
cd $GOPATH/src/github.com/caDemo/org2/peer2/tls-msp/keystore/
mv *_sk key.pem

3.2.3 admin

  • 配置環境變數
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org2/adminuser
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org2/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=$GOPATH/src/github.com/caDemo/org2/adminuser/msp
  • 登入admin使用者獲取MSP證書:
fabric-ca-client enroll -d -u https://admin-org2:[email protected]:7055
  • 複製證書到admincerts資料夾:
    去看Fabric官方的例子,每一個peer節點的MSP資料夾下都有admincerts這個子資料夾的,而且是需要我們手動建立的。
mkdir -p $GOPATH/src/github.com/caDemo/org2/peer1/msp/admincerts
#將簽名證書拷貝過去
cp $GOPATH/src/github.com/caDemo/org2/adminuser/msp/signcerts/cert.pem $GOPATH/src/github.com/caDemo/org2/peer1/msp/admincerts/org2-admin-cert.pem
#回到工作目錄
cd $GOPATH/src/github.com/caDemo/

3.2.4 啟動peer節點

附上peer1節點的容器配置資訊:

  peer1-org2:
    container_name: peer1-org2
    image: hyperledger/fabric-peer
    environment:
      - CORE_PEER_ID=peer1-org2
      - CORE_PEER_ADDRESS=peer1-org2:9051
      - CORE_PEER_LOCALMSPID=org2MSP
      - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/peer1/msp
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=cademo_fabric-ca
      - FABRIC_LOGGING_SPEC=debug
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/signcerts/cert.pem
      - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org2/peer1/tls-msp/keystore/key.pem
      - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org2:9051
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org2/peer1
    volumes:
      - /var/run:/host/var/run
      - $GOPATH/src/github.com/caDemo/org2/peer1:/tmp/hyperledger/org2/peer1
    networks:
      - fabric-ca
      

啟動它.

docker-compose -f docker-compose.yaml up peer1-org2

peer2節點的容器配置資訊:

  peer2-org2:
    container_name: peer2-org2
    image: hyperledger/fabric-peer
    environment:
      - CORE_PEER_ID=peer2-org2
      - CORE_PEER_ADDRESS=peer2-org2:10051
      - CORE_PEER_LOCALMSPID=org2MSP
      - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/peer2/msp
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=cademo_fabric-ca
      - FABRIC_LOGGING_SPEC=debug
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org2/peer2/tls-msp/signcerts/cert.pem
      - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org2/peer2/tls-msp/keystore/key.pem
      - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer2/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org2:9051
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org2/peer2
    volumes:
      - /var/run:/host/var/run
      - $GOPATH/src/github.com/caDemo/org2/peer2:/tmp/hyperledger/org2/peer2
    networks:
      - fabric-ca
      

啟動它.

docker-compose -f docker-compose.yaml up peer2-org2

3.3 排序節點配置

接下來是排序節點的配置,為什麼放在最後面呢,因為排序節點的啟動需要提前生成創世區塊,而創世區塊的生成涉及到另一個配置檔案,所以就先配置簡單的peer節點。

3.3.1 orderer

  • 配置環境變數
#指定order節點的HOME目錄
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org0/orderer
#指定本組織的TLS根證書
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org0/crypto/ca-cert.pem
  • 登入order節點到org0 CA伺服器上:
fabric-ca-client enroll -d -u https://orderer-org0:[email protected]:7053

接下來是TLS證書:

  • 配置環境變數
#指定TLS CA伺服器生成的TLS根證書
export FABRIC_CA_CLIENT_MSPDIR=$GOPATH/src/github.com/caDemo/org0/orderer/tls-msp
#指定TLS根證書
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/tls/ca-cert.pem
  • 登入orderer節點到TLS CA伺服器上:
fabric-ca-client enroll -d -u https://orderer-org0:[email protected]:7052 --enrollment.profile tls --csr.hosts orderer-org0
  • 修改祕鑰檔名
cd $GOPATH/src/github.com/caDemo/org0/orderer/tls-msp/keystore/
mv *_sk key.pem
#修改完回到工作目錄
cd $GOPATH/src/github.com/caDemo

3.3.2 admin

  • 配置環境變數
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/caDemo/org0/adminuser
export FABRIC_CA_CLIENT_TLS_CERTFILES=$GOPATH/src/github.com/caDemo/org0/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=$GOPATH/src/github.com/caDemo/org0/adminuser/msp
  • 登入admin使用者獲取MSP證書:
fabric-ca-client enroll -d -u https://admin-org0:[email protected]:7053
  • 複製證書到admincerts資料夾:
mkdir $GOPATH/src/github.com/caDemo/org0/orderer/msp/admincerts
#將簽名證書拷貝過去
cp $GOPATH/src/github.com/caDemo/org0/adminuser/msp/signcerts/cert.pem $GOPATH/src/github.com/caDemo/org0/orderer/msp/admincerts/orderer-admin-cert.pem
#回到工作目錄
cd $GOPATH/src/github.com/caDemo/

4.Fabric網路配置


接下來到重頭戲了,證書都生成好了,即將要啟動網路了。不過在啟動網路之前還是有很多準備工作需要做。其實到這裡,官方文件已經好多沒有交代清楚的了,所以一下好多內容都是筆者自己摸索出來的,如有錯誤歡迎批評指正。

4.1 configtx.yaml檔案配置

在下一個步驟的生成創世區塊和通道配置資訊需要一個檔案:configtx.yaml檔案。筆者根據官方的例子按照本文內容修改了一下,直接放在工作目錄:


展開檢視

Organizations:
  - &orderer-org0
    Name: orderer-org0
    ID: org0MSP
    MSPDir: ./org0/msp
  #    Policies:
  #      Readers:
  #        Type: Signature
  #        Rule: "OR('orderer-org0MSP.member')"
  #      Writers:
  #        Type: Signature
  #        Rule: "OR('orderer-org0MSP.member')"
  #      Admins:
  #        Type: Signature
  #        Rule: "OR('orderer-org0MSP.admin')"
  
  - &org1
    Name: org1MSP
    ID: org1MSP
    
    MSPDir: ./org1/msp
    #    Policies:
    #      Readers:
    #        Type: Signature
    #        Rule: "OR('org1MSP.admin', 'org1MSP.peer', 'org1MSP.client')"
    #      Writers:
    #        Type: Signature
    #        Rule: "OR('org1MSP.admin', 'org1MSP.client')"
    #      Admins:
    #        Type: Signature
    #        Rule: "OR('org1MSP.admin')"
    AnchorPeers:
      - Host: peer1-org1
        Port: 7051
  
  - &org2
    Name: org2MSP
    ID: org2MSP
    MSPDir: ./org2/msp
    #    Policies:
    #      Readers:
    #        Type: Signature
    #        Rule: "OR('org2MSP.admin', 'org2MSP.peer', 'org2MSP.client')"
    #      Writers:
    #        Type: Signature
    #        Rule: "OR('org2MSP.admin', 'org2MSP.client')"
    #      Admins:
    #        Type: Signature
    #        Rule: "OR('org2MSP.admin')"
    
    AnchorPeers:
      - Host: peer1-org2
        Port: 9051

Capabilities:
  Channel: &ChannelCapabilities
    V1_4_3: true
    V1_3: false
    V1_1: false
  Orderer: &OrdererCapabilities
    V1_4_2: true
    V1_1: false
  Application: &ApplicationCapabilities
    V1_4_2: true
    V1_3: false
    V1_2: false
    V1_1: false

Application: &ApplicationDefaults
  Organizations:
  #  Policies:
  #    Readers:
  #      Type: ImplicitMeta
  #      Rule: "ANY Readers"
  #    Writers:
  #      Type: ImplicitMeta
  #      Rule: "ANY Writers"
  #    Admins:
  #      Type: ImplicitMeta
  #      Rule: "MAJORITY Admins"
  
  Capabilities:
    <<: *ApplicationCapabilities
    
Orderer: &OrdererDefaults
  OrdererType: solo
  
  Addresses:
    - orderer-org0:7050
  BatchTimeout: 2s
  BatchSize:
    MaxMessageCount: 10
    AbsoluteMaxBytes: 99 MB
    PreferredMaxBytes: 512 KB
  Organizations:
#  Policies:
#    Readers:
#      Type: ImplicitMeta
#      Rule: "ANY Readers"
#    Writers:
#      Type: ImplicitMeta
#      Rule: "ANY Writers"
#    Admins:
#      Type: ImplicitMeta
#      Rule: "MAJORITY Admins"
#    # BlockValidation specifies what signatures must be included in the block
#    # from the orderer for the peer to validate it.
#    BlockValidation:
#      Type: ImplicitMeta
#      Rule: "ANY Writers"

Channel: &ChannelDefaults
  #  Policies:
  #    # Who may invoke the 'Deliver' API
  #    Readers:
  #      Type: ImplicitMeta
  #      Rule: "ANY Readers"
  #    # Who may invoke the 'Broadcast' API
  #    Writers:
  #      Type: ImplicitMeta
  #      Rule: "ANY Writers"
  #    # By default, who may modify elements at this config level
  #    Admins:
  #      Type: ImplicitMeta
  #      Rule: "MAJORITY Admins"
  Capabilities:
    <<: *ChannelCapabilities

Profiles:
  
  TwoOrgsOrdererGenesis:
    <<: *ChannelDefaults
    Orderer:
      <<: *OrdererDefaults
      Organizations:
        - *orderer-org0
      Capabilities:
        <<: *OrdererCapabilities
    Consortiums:
      SampleConsortium:
        Organizations:
          - *org1
          - *org2
  TwoOrgsChannel:
    Consortium: SampleConsortium
    <<: *ChannelDefaults
    Application:
      <<: *ApplicationDefaults
      Organizations:
        - *org1
        - *org2
      Capabilities:
        <<: *ApplicationCapabilities


註釋掉的部分是策略部分,筆者還沒有完全搞懂,所以索性就先註釋掉了,以後搞懂了再新增進去。
還有一部分msp需要配置,就是configtx.yaml檔案中第一部分指定的MSPDir,很簡單,按照一下命令複製一下就好了:

#進入工作目錄
cd $GOPATH/src/github.com/caDemo
############################################
#org0
mkdir org0/msp &&  cd org0/msp
mkdir admincerts && mkdir cacerts && mkdir tlscacerts 
cd $GOPATH/src/github.com/caDemo
cp adminuser/msp/signcerts/cert.pem msp/admincerts/ca-cert.pem
cp crypto/ca-cert.pem msp/cacerts/ca-cert.pem
cp ../tls/ca-cert.pem msp/tlscacerts/ca-cert.pem
############################################
#org1
cd $GOPATH/src/github.com/caDemo
mkdir org1/msp/  && cd org1/msp/
mkdir admincerts && mkdir cacerts && mkdir tlscacerts 
cd $GOPATH/src/github.com/caDemo
cp adminuser/msp/signcerts/cert.pem msp/admincerts/ca-cert.pem
cp crypto/ca-cert.pem msp/cacerts/ca-cert.pem
cp ../tls/ca-cert.pem msp/tlscacerts/ca-cert.pem
############################################
#org2
cd $GOPATH/src/github.com/caDemo
mkdir org1/msp/  && cd org1/msp/
mkdir admincerts && mkdir cacerts && mkdir tlscacerts 
cd $GOPATH/src/github.com/caDemo
cp adminuser/msp/signcerts/cert.pem msp/admincerts/ca-cert.pem
cp crypto/ca-cert.pem msp/cacerts/ca-cert.pem
cp ../tls/ca-cert.pem msp/tlscacerts/ca-cert.pem

4.2 生成創世區塊和通道配置資訊

可以了,所有的前期工作都已經完成,接下來就是手動啟動網路了,第一步,生成創世區塊和通道配置資訊:

cd $GOPATH/src/github.com/caDemo
export FABRIC_CFG_PATH=$PWD
#生成創世區塊
configtxgen -profile TwoOrgsOrdererGenesis -outputBlock $GOPATH/src/github.com/caDemo/genesis.block
#生成通道配置資訊
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx $GOPATH/src/github.com/caDemo/channel.tx -channelID mychannel

4.3 啟動Orderer節點

orderer容器配置檔案:

  orderer-org0:
    container_name: orderer-org0
    image: hyperledger/fabric-orderer
    environment:
      - ORDERER_HOME=/tmp/hyperledger/orderer
      - ORDERER_HOST=orderer-org0
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/tmp/hyperledger/genesis.block
      - ORDERER_GENERAL_LOCALMSPID=org0MSP
      - ORDERER_GENERAL_LOCALMSPDIR=/tmp/hyperledger/org0/orderer/msp
      - ORDERER_GENERAL_TLS_ENABLED=true
      - ORDERER_GENERAL_TLS_CERTIFICATE=/tmp/hyperledger/org0/orderer/tls-msp/signcerts/cert.pem
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/tmp/hyperledger/org0/orderer/tls-msp/keystore/key.pem
      - ORDERER_GENERAL_TLS_ROOTCAS=[/tmp/hyperledger/org0/orderer/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem]
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_DEBUG_BROADCASTTRACEDIR=data/logs
    volumes:
      - $GOPATH/src/github.com/caDemo/org0/orderer:/tmp/hyperledger/org0/orderer/
      - $GOPATH/src/github.com/caDemo:/tmp/hyperledger/
    networks:
      - fabric-ca
    

關鍵部分到了,只要這一步沒有出現錯誤,整個網路就啟動成功了。

docker-compose -f docker-compose.yaml up orderer-org0

4.4 啟動組織一的cli容器

cli容器內容,我們需要這個容器對組織1進行鏈碼的互動:

  cli-org1:
    container_name: cli-org1
    image: hyperledger/fabric-tools
    tty: true
    stdin_open: true
    environment:
      - SYS_CHANNEL=testchainid
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - FABRIC_LOGGING_SPEC=DEBUG
      - CORE_PEER_ID=cli-org1
      - CORE_PEER_ADDRESS=peer1-org1:7051
      - CORE_PEER_LOCALMSPID=org1MSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
      - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/signcerts/cert.pem
      - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org1/peer1/tls-msp/keystore/key.pem
      - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/peer1/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org1
    command: /bin/bash
    volumes:
      - $GOPATH/src/github.com/caDemo/org1/peer1:/tmp/hyperledger/org1/peer1
      - $GOPATH/src/github.com/caDemo/org1/peer1/assets/chaincode:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode
      - $GOPATH/src/github.com/caDemo/org1/adminuser:/tmp/hyperledger/org1/adminuser
      - $GOPATH/src/github.com/caDemo:/tmp/hyperledger/
    networks:
      - fabric-ca
    depends_on:
      - peer1-org1

啟動該容器:

docker-compose -f docker-compose.yaml up cli-org1

4.5 啟動組織二的cli容器

cli容器內容,我們需要這個容器對組織2進行鏈碼的互動:

  cli-org2:
    container_name: cli-org2
    image: hyperledger/fabric-tools
    tty: true
    stdin_open: true
    environment:
      - SYS_CHANNEL=testchainid
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - FABRIC_LOGGING_SPEC=DEBUG
      - CORE_PEER_ID=cli-org2
      - CORE_PEER_ADDRESS=peer1-org2:9051
      - CORE_PEER_LOCALMSPID=org2MSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
      - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/signcerts/cert.pem
      - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org2/peer1/tls-msp/keystore/key.pem
      - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/peer1/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org2
    command: /bin/bash
    volumes:
      - $GOPATH/src/github.com/caDemo/org2/peer1:/tmp/hyperledger/org2/peer1
      - $GOPATH/src/github.com/caDemo/org2/peer1/assets/chaincode:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode
      - $GOPATH/src/github.com/caDemo/org2/adminuser:/tmp/hyperledger/org2/adminuser
      - $GOPATH/src/github.com/caDemo:/tmp/hyperledger/
    networks:
      - fabric-ca
    depends_on:
      - peer1-org2

啟動該容器:

docker-compose -f docker-compose.yaml up cli-org2

5.網路測試


所有工作準備完成,接下來讓我們測試整個網路能不能正常執行吧:

5.1 建立與加入通道

以組織1為例:

  • 首先進入cli容器:
docker exec -it cli bash
#配置環境變數
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/adminuser/msp
  • 建立通道
peer channel create -c mychannel -f /tmp/hyperledger/channel.tx -o orderer-org0:7050 --outputBlock /tmp/hyperledger/mychannel.block --tls --cafile /tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
  • peer1-org1加入通道:
export CORE_PEER_ADDRESS=peer1-org1:7051
peer channel join -b /tmp/hyperledger/mychannel.block
  • peer2-org1加入通道:
export CORE_PEER_ADDRESS=peer2-org1:8051
peer channel join -b /tmp/hyperledger/mychannel.block

組織二步驟是相同的,唯一不同的就是不需要建立通道了,所以就不再說明了。

5.2 安裝和例項化鏈碼

以組織1為例:

  • 首先進入cli容器:
docker exec -it cli bash
#配置環境變數
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/adminuser/msp
export CORE_PEER_ADDRESS=peer1-org1:7051
  • 安裝鏈碼
    記得提前將鏈碼放到$GOPATH/src/github.com/caDemo/org1/peer1/assets/chaincode路徑下。,本文使用的是fabric-samples/chaincode/chaincode_example02官方示例鏈碼。
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/chaincode_example02/go/
  • 例項化鏈碼
peer chaincode instantiate -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}'  -o orderer-org0:7050 --tls --cafile /tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
  • 這一步在高版本的Fabric網路是會出錯的,因為少了一個檔案config.yaml:
NodeOUs:
  Enable: true
  ClientOUIdentifier:
    Certificate: cacerts/ca.example.com-cert.pem  #這裡需要修改
    OrganizationalUnitIdentifier: client
  PeerOUIdentifier:
    Certificate: cacerts/ca.example.com-cert.pem  #這裡需要修改
    OrganizationalUnitIdentifier: peer
  AdminOUIdentifier:
    Certificate: cacerts/ca.example.com-cert.pem  #這裡需要修改
    OrganizationalUnitIdentifier: admin
  OrdererOUIdentifier:
    Certificate: cacerts/ca.example.com-cert.pem  #這裡需要修改
    OrganizationalUnitIdentifier: orderer

因為高版本的Fabric把節點型別區分開了,所以需要我們手動配置。
將該檔案複製到$GOPATH/src/github.com/caDemo/org1/adminuser/msp資料夾內,同時修改上面指定的位置的檔名(與對應資料夾內的檔名對應就好了)。

  • 例項化部分出錯的可能性是最高的,很多都是因為網路模式指定錯誤導致鏈碼容器啟動失敗,解決方案:
#終端執行命令
docker network ls

找到以fabric-ca為字尾的一條如cademo_fabric-ca,修改之前的所有peer節點容器配置檔案的環境變數:

- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=cademo_fabric-ca

修改完成重啟節點容器,再次執行以上的命令(需要重新配置環境變數,加入通道這兩個操作)。
終於,例項化成功了。

5.3 呼叫和查詢鏈碼

最後測試一下鏈碼功能能不能正常使用了:

  • 還是組織一的cli容器:
docker exec -it cli bash
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/adminuser/msp
export CORE_PEER_ADDRESS=peer1-org1:7051
  • 執行查詢功能:
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

命令列應該打印出:

100
  • 執行呼叫功能:
peer chaincode invoke -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}' --tls --cafile /tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
  • 再次查詢:
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

命令列應該打印出:

90

至於其他節點操作方法也是一樣的,就不再操作了。
到此為止,從零開始的手動生成證書一直到成功搭建Fabric網路全部步驟已經完成!!接下來還有更新錨節點等等就不再演示了,請各位讀者自行操作。整個步驟是不容易的,而且BUG百出,不過成功搭建完成確實漲了不少知識。
碼字不易,還望各位看官支援一下:

相關推薦

Hyperledger Fabric手動生成CA證書搭建Fabric網路

之前介紹了使用官方指令碼自動化啟動一個Fabric網路,並且所有的證書都是通過官方的命令列工具cryptogen直接生成網路中的所有節點的證書。在開發環境可以這麼簡單進行,但是生成環境下還是需要我們自定義對網路中的節點的證書進行配置。 所以在本文中,將會詳細介紹一個從手動生成證書一直到啟動網路的整體步驟。本文

CentOS7 - Hyperledger Fabric1.1多機部署中切換預設生成證書Fabric-CA

根據蒐集的資料安裝測試並在安裝測試過程中整理的文件,如有不足希望不吝賜教。  目錄 一、前提 二、安裝部署Fabric-CA 1.下載安裝 2.部署 三。生成證書 1.生成fabric-ca admin證書 2建立聯盟. 3.為每個組織準備msp

jdk生成CA證書

知識庫 tor 證書頒發 r文件 防範 簽名 keystore rfc 輸入 前言: JKS文件是一個Java中的密鑰管理庫。 JKS文件就好像一個倉庫,裏面可以放很多的東西,這裏只存放一類東西就是密鑰,倉庫當然會有一把鎖,防範別人隨便亂拿,這個就是JKS文件的密碼。裏面存

手動製作CA證書

一、安裝 CFSSL #下面三個安裝包,無需下載,之前百度雲中的壓縮包中都有[[email protected] ~]# cd /usr/local/src [[email protected]-node1 src]# wget https://pkg.cfssl.org/R1

nginx反向代理cas-server之2:生成證書,centOS下使用openssl生成CA證書(根證書、server證書、client證書)

前些天搭好了cas系統,這幾天一致再搞nginx和cas的反向代理,一直不成功,但是走http還是測試通過的,最終確定是ssl認證證書這一塊的問題,原本我在cas服務端裡的tomcat已經配置了證書,並且能夠使用了,但是現在我用nginx代理使用ssl與cas-server

win64使用openssl生成ca證書

一、準備工作: 先安裝Visual C++ 2008Redistributables (x64),然後安裝Win64 OpenSSL v1.0.1j。這裡我安裝到D:\OpenSSL-Win6

openssl生成ca證書,以及過程中遇到的問題總結

相關說明:轉載於:http://www.cnblogs.com/yangyquin/p/5284530.html在原有的基礎上總結了一些本人安裝過程中的一些問題參考資料:http://blog.sina.com.cn/s/blog_7ea5cb4d0100xfce.html 

Apache OpenSSL生成CA證書使用

最近在學習SSL協議,這次是基於Apache伺服器自帶的openssl來實現的TLS:傳輸層安全協議SSL:安全套接字層KEY:私鑰CSR:證書籤名請求,即公鑰,生成證書時需要將此提交給證書機構,生成 X509 數字證書前,一般先由使用者提交證書申請檔案,然後由 CA 來簽發

信安實踐——自建CA證書搭建https伺服器

1.理論知識https簡介HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。超文字傳輸協

自建CA證書搭建https伺服器

由於CA收費,所以可以自建CA,通過將CA匯入瀏覽器實現https的效果,曾經12306購票就需要自行匯入網站證書。 關於https 2015年阿里巴巴將旗下淘寶、天貓(包括移動客戶端)全站啟用HTTPS加密,並順利通過“雙十一”考驗,成為全球最大的電商平臺全站HTTPS改造案例。 全站HTTPS需要解決3大

ChainDesk|搭建Fabric網路:生成組織結構與身份證書

  作者:ChainDesk韓小東,ChainDesk區塊鏈行業分析師, ChainDesk區塊鏈工程師 本篇文章閱讀時間:3分鐘   目標 明確生成組織結構及身份證書所需的配置檔案及其內容含義 如何使用命令生成對應的組織結構信身份證書

Hyperledger Fabric 手動搭建【區塊鏈學習三】

#Hyperledger Fabric 手動搭建 >前面我們學習了[區塊鏈是什麼](https://www.cnblogs.com/chenxi001/p/13496269.html)、還有[自動搭建](https://www.cnblogs.com/chenxi001/p/13472111.html)學習東

區塊鏈之Hyperledger(超級賬本)Fabric v1.0 的環境搭建(更新)

mirror linu stat iyu wget glob 保存 url oba 參考鏈接:https://blog.csdn.net/so5418418/article/details/78355868 https://blog.csdn.net/wgh101539

區塊鏈 Hyperledger Fabric v1.0.0 環境搭建

  前言:最近專案涉及到超級賬本,在有些理論知識的基礎上,需要整一套環境來。 這是一個特別要注意的事情,筆者之前按照網路上推薦,大部分都是推薦ubuntu系統的,於是下載Ubuntu系統(16.04.5和18.04都試試),遇到各種問題,一直不能成功,大概花了好多天,一直不成功,後來都要放棄了,

ChainDesk第1章 Hyperledger Fabric的認知與環境搭建-邁出第一步

    作者:ChainDesk韓小東,ChainDesk區塊鏈行業分析師, ChainDesk區塊鏈工程師 ChainDesk官網:http://www.chaindesk.cn/?20181211xinlangmeiti 本篇文章閱讀時間:2.3分鐘

Hyperledger Explorer 區塊鏈瀏覽器與已搭建fabric網路結合

折騰了一下午,終於吧Hyperledger Explorer與現有的fabric網路結合起來。其實也挺簡單,主要是踩了許可權的坑。 Hyperledger Explorer介紹 hyperledger explorer主要是為Hyperledger的區塊鏈網路搭建視覺化的環境,可以通

Hyperledger fabric 1.1環境的搭建實操

一、環境整理這一步並非必須,但鑑於docker容器的實際情況,理論上linux核心需要在3.10及以上。有朋友在3.10上跑通過,具體是什麼核心版本沒詳細去確認,為了順利起見,請首先升級linux核心到4.x(最後不成功才要升,新測3.10可跑,linuux要2G記憶體以上)1、CentOS升核心檢視Cent

區塊鏈之Hyperledger(超級賬本)Fabric v1.0 的環境搭建(超詳細教程)

首先感謝深藍居,這篇教程是基於他的教程[http://www.cnblogs.com/studyzy/p/7437157.html]整理的,區塊鏈技術發展很快,在大神的教程上稍做了些補充。另外,有也在學習區塊鏈的同學可以聯絡我,大家互相學習! 在剛開始接觸Hy

手動安裝K8s 1.10 第二節:基礎環境+CA證書

docekr kubernetes 容器 1、安裝Dockeryum install docker-ce -y 2、準備相關軟件上傳k8s-v1.10.1-manual.zip到/usr/local/src[root@k8smaster src]# lltotal 1178908-rw-r--r-

kubernetes V1.10.4 集群部署 (手動生成證書)

nbsp namespace owin 服務器初始 row lse uber air sam 說明:本文檔涉及docker鏡像,yaml文件下載地址鏈接:https://pan.baidu.com/s/1QuVelCG43_VbHiOs04R3-Q 密碼:70q2本文只是作