CA Hyperledger Facric: раздел запроса на подписание сертификата (CSR) от ENV - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу переопределить этот раздел файла fabric-ca-server-config.yaml переменными env:

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 голосов
/ 03 октября 2018

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
...