如何搭建Fabric 1.1 一个CA环境并通过sdk获取证书

直接来干货。

配置并启动CA服务

下载fabric-sdk-java 1.1版本,进入 fabric-sdk-java/fabric-sdk-java/src/test/fixture/sdkintegration,这里包含了ca服务启动的脚本和配置。可以根据需要多少个caf服务来相应的修改 docker-compose.yaml。一个示例如下:

配置完后,运行 ./fabric.sh up,会启动对应的ca服务。

有两种方式与ca服务器交互,一个是使用 fabric-ca-client ,通过命令行生成相应的ca证书。还有一种是使用fabric-sdk-java, 通过java层代码和ca服务器交互,生成ca证书。如果你不需要进行证书管理,那可以直接使用命令行,方便。如果是需要进行证书管理,动态配置等,还是通过编程实现会更灵活。

代码与CA服务交互

编码实现生成ca证书共需要4步。

生成 HFCAClient 实例

sdk提供了生成HFCAClient的API

需要传两个参数:

url: ca的服务器地址,如果是本地的,就直接使用: http://localhost:7054。如果是远程的改成对应的ip或是域名就可以

properties: 可以为null

代码如下:

调用 register方法

代码比较简单,但是在1.1中需要注意一点“:

用CA生成的用户证书,需要保证user的类型为 setType(HFCAClient.HFCA_TYPE_CLIENT),否则把生成的ca证书放在fabric环境中进行部署时候会出现如下错误:

使用docker logs 查看错误为:

这个问题可以通过查看源码得到解释,源码中有一段为:

可以看出目前只支持Client和peer两种。这个在1.2就没有这个问题

调用 enroll

这里的secrectId为hfcaClient.register返回的结果

保存证书

hfcaClient.enroll返回的一个Enrollment对象,对象中可以获得一个加密的byte数组,这个是证书内容,但是不能直接把这个保存成一个私钥文件。这样直接保存会发现使用时候无法启动fabric环境。

正确的使用姿势为:

之后把这个保存成到一个文件中即可,这样私钥文件生成。

enroll.getCert() 为公钥内容,直接保存在pem文件格式就可以。

写在最后

但是根证书需要我们自己生成,可以使用openssl来生成。当然也可以通过openssl来查看生成证书的具体信息

赶快来分享关注吖

蜗牛讲技术,满满的都是干货,你值得关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181202G0BFMY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券