超級帳本Fabric如何使用第三方CA

Hyperledger Fabric(HF)爲終端用戶使用自有CA提供了fabric-ca工具。然而在生產環境中應當儘量保證根CA的安全性,例如讓根CA離線,而將Hyperledger Fabric環境中的證書籤發代理給中間 CA。在本文中,咱們將介紹如何使用第三方CA做爲根CA,使用fabric-ca做爲中間CA,以及如何在CA信任鏈中整合第三方CA與fabric-ca。git

Hyperledger Fabric區塊鏈開發教程: Node.js | Java | Golanggithub

一、準備工做

爲了演示外部CA和中間CA的使用,咱們將部署一個根CA,它只負責簽發中間CA的證書。這個中間CA採用Fabric CA,負責簽發用戶和節點證書。出於簡化考慮,在這個教程中,咱們將使OpenSSL。docker

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FG5jPuCg-1582423441932)(fabric-external-root-ca-tutorial/demo.png)]

在開始以前,請參考相應文檔先完成如下前置環節的部署和知識準備:安全

  • 安裝docker、docker-compose、git和curl
  • Hyperledger Fabric和bash/sheel腳本基礎知識
  • PKI基礎知識

克隆本教程演示代碼倉庫,其中包含了全部用到的腳本:bash

git clone https://github.com/aldredb/external-ca
cd external-ca

下載Hyperledger Fabric預編譯程序並刪除不須要的文件。咱們只用到cryptogen, fabric-ca-client和configtx。curl

curl -sSL http://bit.ly/2ysbOFE | bash -s -- 1.4.1 -d -s
rm -f config/configtx.yaml config/core.yaml config/orderer.yaml

使用cryptogen爲排序節點機構生成證書和密鑰:工具

export PATH=$PWD/bin:$PATH
export FABRIC_CFG_PATH=${PWD}
cryptogen generate --config=./crypto-config.yaml

建立用於保存對等節點機構org1.example.com的證書和密鑰的目錄結構。以下所示,該機構包含一個節點peer0.org1.example.com和兩個用戶:adminAdmin@org1.example.com。中間CA的證書和密鑰將保存在ca文件夾裏。區塊鏈

ORG_DIR=$PWD/crypto-config/peerOrganizations/org1.example.com
PEER_DIR=$ORG_DIR/peers/peer0.org1.example.com
REGISTRAR_DIR=$ORG_DIR/users/admin
ADMIN_DIR=$ORG_DIR/users/Admin@org1.example.com
mkdir -p $ORG_DIR/ca $ORG_DIR/msp $PEER_DIR $REGISTRAR_DIR $ADMIN_DIR

二、建立中間CA

生成私鑰和證書籤名請求/CSR。注意機構的值與根CA相同。url

openssl ecparam -name prime256v1 -genkey -noout -out \
  $ORG_DIR/ca/ica.org1.example.com.key.pem
openssl req -new -sha256 -key $ORG_DIR/ca/ica.org1.example.com.key.pem \
  -out $ORG_DIR/ca/ica.org1.example.com.csr \
  -subj "/C=SG/ST=Singapore/L=Singapore/O=org1.example.com/OU=/CN=ica.org1.example.com"

根CA負責簽名中間CA的CSR並簽發證書,中間CA證書的有效期是根CA證書的一半。注意咱們使用v3_intermediate_ca擴展。代理

openssl ca -batch -config openssl_root.cnf -extensions v3_intermediate_ca \
  -days 1825 -notext -md sha256 -in $ORG_DIR/ca/ica.org1.example.com.csr \
  -out $ORG_DIR/ca/ica.org1.example.com.crt.pem

如今讓咱們看一下獲得的證書:

openssl x509 -in $ORG_DIR/ca/ica.org1.example.com.crt.pem -text -noout

以下所示,能夠看到證書的簽發機構是: rca.org1.example.com:

Issuer: C=SG, ST=Singapore, L=Singapore, O=org1.example.com, CN=rca.org1.example.com
Validity
    Not Before: May  3 10:16:44 2019 GMT
    Not After : Apr 30 10:16:44 2029 GMT
Subject: C=SG, ST=Singapore, O=org1.example.com, CN=ica.org1.example.com

一旦咱們簽發了中間CA的證書,就再也不須要根CA了,除非須要建立另外一箇中間CA或者回收中間CA的證書。

如今建立CA鏈文件,其中包含了中間CA和genCA的證書:

cat $ORG_DIR/ca/ica.org1.example.com.crt.pem \
  $PWD/rca/certs/rca.org1.example.com.crt.pem > \
  $ORG_DIR/ca/chain.org1.example.com.crt.pem

最後啓動中間CA,中間CA的配置文件指向咱們前面建立的證書、密鑰和CA鏈。 你能夠參考ca-config/fabric-ca-server-config.yaml文件:

docker-compose up -d ica.org1.example.com

三、簽發peer節點證書和用戶證書

中間CA就緒後,咱們如今能夠簽發用戶證書和peer節點證書了。

首先加入(enroll)admin用戶,該用戶有權限註冊(register)其餘用戶:

export FABRIC_CA_CLIENT_HOME=$REGISTRAR_DIR
fabric-ca-client enroll --csr.names C=SG,ST=Singapore,L=Singapore,O=org1.example.com \
  -m admin -u http://admin:adminpw@localhost:7054

如今用admin註冊機構org1.example.com的管理員Admin@org1.example.com,以及peer節點peer0.org1.example.com

fabric-ca-client register --id.name Admin@org1.example.com \
  --id.secret mysecret --id.type client --id.affiliation org1 \
  -u http://localhost:7054fabric-ca-client register \
  --id.name peer0.org1.example.com --id.secret mysecret \
  --id.type peer --id.affiliation org1 -u http://localhost:7054

加入Admin@org1.example.com

export FABRIC_CA_CLIENT_HOME=$ADMIN_DIR
fabric-ca-client enroll \
  --csr.names C=SG,ST=Singapore,L=Singapore,O=org1.example.com \
  -m Admin@org1.example.com \
  -u http://Admin@org1.example.com:mysecret@localhost:7054
mkdir -p $ADMIN_DIR/msp/admincerts && \
  cp $ADMIN_DIR/msp/signcerts/*.pem $ADMIN_DIR/msp/admincerts/

加入peer0.org1.example.com

export FABRIC_CA_CLIENT_HOME=$PEER_DIRfabric-ca-client enroll \
  --csr.names C=SG,ST=Singapore,L=Singapore,O=org1.example.com \
  -m peer0.org1.example.com \
  -u http://peer0.org1.example.com:mysecret@localhost:7054
mkdir -p $PEER_DIR/msp/admincerts && \
  cp $ADMIN_DIR/msp/signcerts/*.pem $PEER_DIR/msp/admincerts/

如今讓咱們看一下其中某個證書,例如peer0.org1.example.com的證書:

openssl x509 -in $PEER_DIR/msp/signcerts/cert.pem -text -noout

證書的簽發者應當是ica.org1.example.com:

Issuer: C=SG, ST=Singapore, O=org1.example.com, CN=ica.org1.example.com
Validity
    Not Before: May  3 10:27:59 2019 GMT
    Not After : May  2 10:28:00 2020 GMT
Subject: C=SG, ST=Singapore, L=Singapore, O=org1.example.com, OU=peer, OU=org1, CN=peer0.org1.example.com

恭喜!咱們已經完成了第三方CA和Fabric CA的整合!

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-haYESz6V-1582423441933)(fabric-external-root-ca-tutorial/ca-chain-done.png)]


原文連接:Hyperledger Fabric中使用第三方CA的教程及源碼 — 匯智網

相關文章
相關標籤/搜索