**證書授權設置**
**Certificate Authority(CA)設置**
CA為一個區塊鏈上的用戶提供了許多的證書服務。更具體的說,這些服務與用戶登記(user enrollment),事務調用(transactions invoked)有關,并且這些服務在用戶之間,或者區塊鏈的組件之間,都是 基于TLS安全連接的。
**登記證書授權(ECA)**
**Enrollment Certificate Authority**
ECA允許新用戶注冊入區塊鏈網絡中,并且允許注冊用戶請求一對登記證書(enrollment certificate pair)。一個是為了數據簽名,另一個是為了數據加密。嵌入在證書中的公鑰必須是ECDSA類型,這樣用戶就可以將數據加密的秘鑰轉換為橢圓曲線集成加密系統(ECIES:Elliptic Curve Integrated Encryption System)的方式來使用。
**事務證書授權(TCA)**
**Transaction Certificate Authority**
一旦用戶登記完,他就能向TCA請求事務證書。這些證書將被用來在區塊鏈中部署鏈碼,和調用鏈碼事務。盡管一個事務證書可用于多個事務,但是為了隱私原因,還是建議每一個事務都用一個新的事務證書。
**TLS證書授權(TLSCA)**
除了*登記證書*,和*事務證書*之外,用戶還需要TLS證書來保證他們的信道(通信頻道)安全。TLS證書可以向TLSCA請求。
**配置**
所有的CA服務都是由一個單獨進程提供,可以在CA配置文件`membersrvc.yaml`中配置參數,該文件就位于CA庫的目錄下。更具體的說,可以設置下面的參數:
* `server.gomaxprocs`:限制CA可以使用多少系統線程。
* `server.rootpath`:CA存儲它的狀態的文件夾根路徑。
* `server.cadir`:CA存儲它的狀態的文件夾名字。
* `server.port`:所有CA服務的監聽端口(它們通過[GRPC](http://www.grpc.io/)實現端口復用)。
此外,日志級別可以通過調整以下設置來啟用/禁用:
* `logging.trace` (默認關閉,僅用于調試代碼)
* `logging.info`
* `logging.warning`
* `logging.error`
* `logging.panic`
另外,這些屬性可以通過環境變量來設置,如果設置,其優先級會高于yaml文件(`membersrvc.yaml`)中的條目。對應的環境變量名如下:
~~~
MEMBERSRVC_CA_SERVER_GOMAXPROCS
MEMBERSRVC_CA_SERVER_ROOTPATH
MEMBERSRVC_CA_SERVER_CADIR
MEMBERSRVC_CA_SERVER_PORT
~~~
此外,CA可以預先加載已注冊用戶,每一個用戶的name, roles, password都已被指定:
~~~
eca:
users:
alice: 2 DRJ20pEql15a
bob: 4 7avZQLwcUe9q
~~~
role值就是下面這樣簡單的一個位掩碼:
~~~
CLIENT = 1;
PEER = 2;
VALIDATOR = 4;
AUDITOR = 8;
~~~
例如,一個peer如果還是一個驗證者,那么它的role值就是6。
當CA第一次啟動時,它會產生所有需要的狀態(比如:內部數據庫,CA證書,區塊鏈秘鑰,等等),并將這個狀態寫入配置給定的目錄中。CA服務的證書(比如,ECA,TCA,TLSCA的證書)都自簽名為當前默認值。如果那些證書需要被一些根CA簽名,可以使用CA狀態目錄下的`*.priv`私鑰和`*.pub`公鑰來手動完成,然后替換掉自簽名的`*.cert`證書。CA下一次啟動的時候,它就會讀取和使用那些根簽名的證書了。
**編譯運行CA**
CA可以在membersrvc目錄下,通過如下方式進行編譯:
~~~
cd $GOPATH/src/github.com/hyperledger/fabric
make membersrvc
~~~
可以通過如下命令啟動CA:
~~~
build/bin/membersrvc
~~~
**說明:CA必須在所有fabric peer節點之前啟動,保證在任何peer節點嘗試連接它之前,完成初始化。**
CA會在`$GOPATH/src/github.com/hyperledger/fabric/membersrvc`路徑下尋找`membersrvc.yaml`配置文件。