Hyperledger Facric CA:ENV的“覆盖证书签名请求(CSR)”部分

时间:2018-09-16 00:08:28

标签: environment-variables yaml hyperledger viper

我想通过变量env覆盖fabric-ca-server-config.yaml文件的这一部分:

csr:
  cn: fabric-ca-server
  names:
    - C: US
     ST: "North Carolina"
      L:
      O: Hyperledger
     OU: Fabric
  hosts:
    - host1.example.com
    - localhost
ca:
  expiry: 131400h
  pathlength: 1

例如,我知道:

FABRIC_CA_SERVER_CSR_CN=fabric-ca-server等同于csr.cn 但 csr.names ?? csr.host?

是吗?:

FABRIC_CA_SERVER_CSR_NAMES=C:US,ST:"North Carolina",L:,O:Hyperledger,OU:Fabric

致谢

1 个答案:

答案 0 :(得分:3)

TL; DR:您不能使用env覆盖CSR。变量,但是您可以在配置文件中自定义CSR。


长答案:

这里有两个问题:

1)您收到的错误指出配置正在寻找映射(这是在fabric-ca-server-config.yaml文件中格式化的方式)。

要在bash脚本变量中创建地图,您需要声明关联数组:

declare -A FABRIC_CA_SERVER_CSR_NAMES=( \
    [C]="US" \
    [ST]="Texas" \
    [L]="" \
    [O]="TangoJLabs" \
    [OU]="testenvvar" \
)
export FABRIC_CA_SERVER_CSR_NAMES
echo ${FABRIC_CA_SERVER_CSR_NAMES[OU]}

2)但是,由于环境变量can only be strings,因此似乎无法使用环境变量覆盖配置CSR设置。像FABRIC_CA_SERVER_CSR_NAMES_OU之类的东西将不起作用,因为names:是一个映射,因此可能会有多个OU条目。

docs state

  

如果需要CSR的自定义值,则可以自定义   配置文件,删除由ca.certfile指定的文件,然后   ca.keyfile配置项,然后运行fabric-ca-server init   -b admin:adminpw命令。

因此,我通常要做的只是创建一个最小的配置文件,然后在运行init之前将其复制到CA容器中。这似乎足够了(其他部分采用默认值):

registry:
  maxenrollments: -1
  identities:
     - name: mycompany-admin-ca
       pass: adminpw
       type: client
       affiliation: ""
       attrs:
          hf.Registrar.Roles: "*"
          hf.Registrar.DelegateRoles: "*"
          hf.Revoker: true
          hf.IntermediateCA: true
          hf.GenCRL: true
          hf.Registrar.Attributes: "*"
          hf.AffiliationMgr: true

affiliations:
  mycompany: []

csr:
   cn: mycompany-ca
   names:
      - C: US
        ST: Texas
        L:
        O: MyCompany
        OU: client
   hosts:
     - mycompany-ca
   ca:
      expiry: 131400h
      pathlength: 1

由于某些原因,如果您包括一个自定义fabric-ca-server-config.yaml文件,但排除了registry:部分,则即使您使用命令行-b选项,它也不会注册引导用户。因此,如果包含该registry:部分,则在运行-b时不需要init选项。

您可能还希望包含ca:部分,因为您可以强制将创建的证书保存为您的自定义名称:

ca:
  name: mycompany-ca
  keyfile: /etc/hyperledger/fabric-ca-server/mycompany-ca-cert.key
  certfile: /etc/hyperledger/fabric-ca-server/mycompany-ca-cert.pem
  chainfile:

此外,在运行init之前,我会清理您的主目录-有时默认的ca-cert.pem(和密钥)已经存在并且不会被替换:

rm $FABRIC_CA_SERVER_HOME/ca-cert.pem
rm -R $FABRIC_CA_SERVER_HOME/msp

当然,运行init后,您的密钥将保存在msp目录树中的以下位置:

msp
    └── keystore
        ├── {...}_sk

为了方便起见,我通常将其移至主目录并重命名:

cp $FABRIC_CA_SERVER_HOME/msp/keystore/*_sk $FABRIC_CA_SERVER_HOME/mycompany-ca-cert.key