Fabric-CA

Fabric CA概述

參考

下圖展示了Hyperledger Fabric CA服務器在整個Heyperledger Fabric架構中的定位:

在這裏插入圖片描述

有兩種方式可以與Hyperledger Fabric CA服務器交互:

  • 使用Hyperledger Fabric CA客戶端
  • 使用某種特定開發語言的Farbic SDK。

所有與Hyperledger Fabric CA服務器的通信都是 使用REST API。可以查看fabric-ca/swagger/swagger-fabric-ca.json文件以獲得這些REST API的swagger文檔。也可以在線訪問http://editor2.swagger.io以查看文檔。

Hyperledger Fabric CA客戶端或SDK可能連接到Hyperledger Fabric CA服務器集羣 中的一個服務器,這一點可以查看上圖的右上部分。客戶端將請求提交給HA代理訪問 端結點,HA代理進行負載均衡,並將客戶端的請求路由給fabric-ca-server集羣中的 某一成員服務器。

集羣中的所有Hyperledger Fabric CA服務器共用同一個數據庫,以跟蹤身份和證書。 如果配置了LDAP,那麼身份信息將保存在LDAP中而不是數據庫裏。

一個服務器可能包含多個CA,每個CA可能是根CA或者中間CA。每個中間CA都有一個 父級CA,該父級CA要麼是根CA,要麼是中間CA。

Fabric CA服務器概述

可以在啓動Fabric CA服務器之前先進行初始化。這讓我們有機會 生成默認的配置文件,以便在啓動服務器之前進行自定義調整。

Fabric CA服務器的主目錄按以下邏輯確定:

如果命令行存在-home選項,那麼使用該選項值

  • 否則,如果存在FABRIC_CA_SERVER_HOME環境變量,那麼使用該環境變量值
  • 否則,如果存在FABRIC_CA_HOME環境變量,那麼使用該環境變量值
  • 否則,如果存在CA_CFG_PATH環境變量,那麼使用該環境變量值
  • 否則,使用當前工作目錄

Fabric CA 啓動和測試

refer

docker fabric-ca-server啓動

cd $gopath/src/github.com/hyperledger/fabric-ca/docker/server
如果想要使用不同fabric-ca版本,修改docker-compose.yml

     image: hyperledger/fabric-ca
+   image: hyperledger/fabric-ca:1.4.6

執行

docker-compose up

docker啓動日誌

fabric-ca-server    | 2020/04/14 03:48:43 [INFO] Configuration file location: /etc/hyperledger/fabric-ca-server/fabric-ca-server-config.yaml
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] Starting server in home directory: /etc/hyperledger/fabric-ca-server
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] Server Version: 1.4.6
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] Server Levels: &{Identity:2 Affiliation:1 Certificate:1 Credential:1 RAInfo:1 Nonce:1}
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] The CA key and certificate already exist
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] The key is stored by BCCSP provider 'SW'
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] The certificate is at: /etc/hyperledger/fabric-ca-server/ca-cert.pem
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] Initialized sqlite3 database at /etc/hyperledger/fabric-ca-server/fabric-ca-server.db
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] The Idemix issuer public and secret key files already exist
fabric-ca-server    | 2020/04/14 03:48:43 [INFO]    secret key file location: /etc/hyperledger/fabric-ca-server/msp/keystore/IssuerSecretKey
fabric-ca-server    | 2020/04/14 03:48:43 [INFO]    public key file location: /etc/hyperledger/fabric-ca-server/IssuerPublicKey
fabric-ca-server    | 2020/04/14 03:48:43 [INFO] The Idemix issuer revocation public and secret key files already exist
fabric-ca-server    | 2020/04/14 03:48:43 [INFO]    private key file location: /etc/hyperledger/fabric-ca-server/msp/keystore/IssuerRevocationPrivateKey
fabric-ca-server    | 2020/04/14 03:48:43 [INFO]    public key file location: /etc/hyperledger/fabric-ca-server/IssuerRevocationPublicKey
fabric-ca-server    | 2020/04/14 03:48:44 [INFO] Home directory for default CA: /etc/hyperledger/fabric-ca-server
fabric-ca-server    | 2020/04/14 03:48:44 [INFO] Operation Server Listening on 127.0.0.1:9443
fabric-ca-server    | 2020/04/14 03:48:44 [INFO] Listening on http://0.0.0.0:7054

說明:

  • 服務器自動創建默認的配置文件fabric-ca-server-config.yaml
  • 服務器自動生成自簽名證書ca-cert.pem和ca-key.pem文件
  • Fabric CA服務器將在端口7054監聽
  • 生成sqlite3數據庫fabric-ca-server.db

docker啓動時,默認會執行

fabric-ca-server start -b admin:adminpw

表明:

進入docker ,可以查看默認Fabric CA服務器的主目錄爲 /etc/hyperledger/fabric-ca-server

docker exec -it 35cd0bf14a51 bash
root@35cd0bf14a51:/# echo $FABRIC_CA_HOME
/etc/hyperledger/fabric-ca-server

fabric-ca-client

fabric client 目錄

Fabric-CA 可以採用客戶端命令行或 RESTful API 在內的兩種方式與 Fabric-CA 服務端進行交互。其中最方便的方式是通過客戶端工具 fabric-ca-client。

Fabric-CA 客戶端的主目錄路徑設置如下:

如果設置了 --home 命令行選項,以此值爲首選;
如果沒有設置 --home ,則查找 FABRIC_CA_CLIENT_HOME 值;
否則,查找 FABRIC_CA_HOME 值;
否則,查找 CA_CFG_PATH 值;
如果都未設置,則使用 $HOME/.fabric-ca-client 作爲客戶端的主目錄。

如果沒有export FABRIC_CA_CLIENT_HOME,那麼fabric-ca-client就會去找FABRIC_CA_HOME目錄,也就是客戶端生成的數據都會跑到server的目錄中

fabric client 命令

fabric-ca-client 命令可以與服務端進行交互, 包括五個子命令:

  • enroll: 登記獲取證書ECert
  • register:登記用戶
  • getcainfo:獲取CA服務的證書鏈
  • reenroll:重新註冊
  • revoke:撤銷簽發的證書身份
  • version:Fabric-CA 客戶端版本信息
    這些命令在執行時都是通過服務端的 RESTful 接口來進行操作的。

fabric-ca-client enroll

進入docker ,

docker exec -it 35cd0bf14a51 bash

$ mkdir -p /etc/hyperledger/fabric-ca-client/admin
$ export FABRIC_CA_CLIENT_HOME=/etc/hyperledger/fabric-ca-client/admin
$ fabric-ca-client enroll -u http://admin:adminpw@localhost:7054

日誌

2020/04/17 07:36:49 [INFO] Created a default configuration file at /etc/hyperledger/fabric-ca-client/admin/fabric-ca-client-config.yaml
2020/04/17 07:36:49 [INFO] generating key: &{A:ecdsa S:256}
2020/04/17 07:36:49 [INFO] encoded CSR
2020/04/17 07:36:49 [INFO] Stored client certificate at /etc/hyperledger/fabric-ca-client/admin/msp/signcerts/cert.pem
2020/04/17 07:36:49 [INFO] Stored root CA certificate at /etc/hyperledger/fabric-ca-client/admin/msp/cacerts/localhost-7054.pem
2020/04/17 07:36:49 [INFO] Stored Issuer public key at /etc/hyperledger/fabric-ca-client/admin/msp/IssuerPublicKey
2020/04/17 07:36:49 [INFO] Stored Issuer revocation public key at /etc/hyperledger/fabric-ca-client/admin/msp/IssuerRevocationPublicKey
  • 客戶端自動創建默認的配置文件fabric-ca-client-config.yaml,可以通過修改此配置文件修改CSR refer
  • 客戶端證書使用256位ecdsa算法
  • 客戶端申請證書的私鑰爲./msp/keystore/38fa9d6943c9dd5ee06941b215f91825f5f9699a5c6ea9503a39d4b6a48d7e11_sk refer
  • 生成客戶端證書cert.pem,服務端數據庫的certificates表中會保存此證書,用於和服務端通信 refer
  • 服務端證書localhost-7054.pem,用於和服務端通信
  • 生成客戶端零知識證明組件Idemix(Identity Mixer)的IssuerPublicKey和IssuerRevocationPublicKey refer

當客戶端執行完了fabric-ca-client enroll -u http://admin:adminpw@localhost:7054之後,會在fabric-ca-server的數據庫的certificates表中插入一條數據
在這裏插入圖片描述

id: admin       # 用戶id
serial_number: 319a43b31df518726303709400551a8be3ec9c9c  #證書id
authority_key_identifier: 26656bcad5fb8bfd47f0a81639328cd15224e1f1 #權限key,同一個用戶多次登記,值不變
ca_label:
status: good  # 當前狀態好
reason: 0   
expiry: 2021-04-17 09:47:00+00:00  # 過期時間,1年
revoked_at:
pem:
-----BEGIN CERTIFICATE-----
MIICPzCCAeagAwIBAgIUMZpDsx31GHJjA3CUAFUai+PsnJwwCgYIKoZIzj0EAwIw
aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK
EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMt
Y2Etc2VydmVyMB4XDTIwMDQxNzA5NDIwMFoXDTIxMDQxNzA5NDcwMFowXTELMAkG
A1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQKEwtIeXBl
cmxlZGdlcjEPMA0GA1UECxMGY2xpZW50MQ4wDAYDVQQDEwVhZG1pbjBZMBMGByqG
SM49AgEGCCqGSM49AwEHA0IABOMJp6m6NS74fNQMce5CkG7CrB6PossKBp4C8Y9V
hXGJqNS0jDvgNJBXBhgAPhpHQIym/QNHa/82GJ0G1LqwqyqjeTB3MA4GA1UdDwEB
/wQEAwIHgDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQHWuJw+wPlcdaW+4NgyHem
N/SOTDAfBgNVHSMEGDAWgBQmZWvK1fuL/UfwqBY5MozRUiTh8TAXBgNVHREEEDAO
ggwzNWNkMGJmMTRhNTEwCgYIKoZIzj0EAwIDRwAwRAIgUawDVUCU6N25Ql169+cH
R5Xm3znSOEfGyOcygyOf0ewCIEZWzha4fXEklZnvtn0kAdY00VS2K4zbKYmIWQm7
pnZ8
-----END CERTIFICATE-----  #ECert:Enrollment Certificate 客戶端獲取的登記證書,對應客戶端路徑msp/signcerts/cert.pem
level: 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章