TL; DR: Вы не можете переопределить CSR с помощью env. переменные, но вы можете настроить 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) Однако переменные среды могут быть только строками , поэтому не представляется возможным переопределить настройки CSR конфигурации переменными среды. Что-то вроде FABRIC_CA_SERVER_CSR_NAMES_OU
не будет работать, потому что names:
- карта, поэтому может быть несколько OU
записей.
Состояние документов :
Если требуются пользовательские значения для CSR, вы можете настроить
файл конфигурации, удалите файлы, указанные в файле ca.certfile и
элементы конфигурации ca.keyfile, а затем запустите init-ткань-ca-server
-b admin: снова команда adminpw.
Итак, обычно я создаю минимальный конфигурационный файл и копирую его в контейнер CA перед запуском init
. Этого, кажется, достаточно (с другими разделами, принимающими значения по умолчанию):
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