我想通过变量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
致谢
答案 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
条目。
如果需要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