Hyperlegder Fabri c: сертификат CA не имеет атрибута CA, даже если он имеет - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь установить установку Hyperledger Fabri c с моим собственным центром сертификации и пользователем. Я использую версию 1.4.6 . Я все ближе. Но вот что происходит, когда я пытаюсь создать канал:

peer channel create -o orderer.diro.umontreal.ca:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/indepedent/orderer/msp/signcerts/cert.pem

В ответ я получаю:

Cannot run peer because error when setting up MSP of type bccsp from directory /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/indepedent/admin3/msp: CA Certificate did not have the CA attribute, (SN: 6143ea1883f7a36a3d794bfab314ea05d9ddd270)

admin3 - это моя текущая попытка регистрации администратора в CA. Однако вот что происходит, когда я пытаюсь заглянуть внутрь сертификата CA для этого пользователя:

openssl x509 -in crypto-config/indepedent/admin3/msp/cacerts/localhost-7054.pem -text -noout | grep CA:
            CA:TRUE, pathlen:0

Так что, похоже, он все-таки имеет атрибут CA. Что дает?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Проверьте наличие сертификата в папке: crypto-config/indepedent/admin3/msp/tlscacerts и убедитесь, что это сертификат CA или нет.

0 голосов
/ 12 апреля 2020

Я не мог заставить все работать, но эта часть работала, и это было неочевидно, поэтому я документирую это здесь на случай, если это поможет кому-то в будущем:

Сначала создайте ключ. Не сертификат, а ключ:

openssl ecparam -name prime256v1 -genkey -param_enc named_curve -out private-key.pem

Кривые elipti c типа prime, похоже, работают, и важно, чтобы они были named_cure типами. Вы можете изменить размер. Эта часть находится в документации.

Затем создайте сертификат:

openssl req -new -x509 -key private-key.pem -out tls-cert.pem -subj '/CN=Same name as original'  -days 10000 -addext "subjectAltName = DNS:localhost"

Теперь, когда я запустил ЦС, он не работал. Хотел закрытый ключ. Это дало длинный шестнадцатеричный номер для закрытого ключа. Я скопировал закрытый ключ в хранилище ключей как файл с именем <long_number>_sk, но этого было недостаточно. Этот файл содержит два раздела, и первый должен быть удален. Поэтому мне пришлось go и удалить первые три строки.

Это сработало. После этого у меня был сертификат CA, который также работал как сертификат TLS. Но теперь я должен воссоздать всех своих пользователей.

Я попытался добавить файл конфигурации с опцией -config, но это удалило необходимый атрибут CA:TRUE.

[EDIT]

Мне также удалось создать файл конфигурации, который работает и делает то же самое с помощью более короткой команды:

[ req ]
distinguished_name     = req_distinguished_name
x509_extensions        = v3_intermediate_ca

[ v3_intermediate_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints       = critical, CA:true, pathlen:0
keyUsage               = critical, digitalSignature, cRLSign, keyCertSign
subjectAltName         = @alt_names

[ req_distinguished_name ]
C                      = US
ST                     = CA
L                      = City
O                      = Institution
OU                     = Department
CN                     = main-ca

[ alt_names ]
DNS.0                  = CN localhost

А затем:

openssl req -new -x509 -key private-key.pem -out tls-cert.pem -subj '/CN=The Subject' -days 10000 -config openssl.cnf
...