**证书授权设置**
**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`配置文件。