При начальной загрузке заказчик выдает следующую ошибку:
[orderer.common.server] Start -> PANI 003 Failed validating bootstrap block: initializing channelconfig failed: could not create channel Orderer sub-group config: setting up the MSP manager failed: CA Certificate did not have the CA attribute, (SN: f8adffbd6a2debed01cd2840f1f75cd77bfdc9c)
panic: Failed validating bootstrap block: initializing channelconfig failed: could not create channel Orderer sub-group config: setting up the MSP manager failed: CA Certificate did not have the CA attribute, (SN: f8adffbd6a2debed01cd2840f1f75cd77bfdc9c)
goroutine 1 [running]:
github.com/hyperledger/fabric/vendor/go.uber.org/zap/zapcore.(*CheckedEntry).Write(0xc0001b1970, 0x0, 0x0, 0x0)
/opt/gopath/src/github.com/hyperledger/fabric/vendor/go.uber.org/zap/zapcore/entry.go:229 +0x515
github.com/hyperledger/fabric/vendor/go.uber.org/zap.(*SugaredLogger).log(0xc0001382a0, 0xc00003d804, 0x10355b0, 0x25, 0xc00047bd10, 0x1, 0x1, 0x0, 0x0, 0x0)
/opt/gopath/src/github.com/hyperledger/fabric/vendor/go.uber.org/zap/sugar.go:234 +0xf6
github.com/hyperledger/fabric/vendor/go.uber.org/zap.(*SugaredLogger).Panicf(0xc0001382a0, 0x10355b0, 0x25, 0xc00047bd10, 0x1, 0x1)
/opt/gopath/src/github.com/hyperledger/fabric/vendor/go.uber.org/zap/sugar.go:159 +0x79
github.com/hyperledger/fabric/common/flogging.(*FabricLogger).Panicf(0xc0001382a8, 0x10355b0, 0x25, 0xc00047bd10, 0x1, 0x1)
/opt/gopath/src/github.com/hyperledger/fabric/common/flogging/zap.go:74 +0x60
github.com/hyperledger/fabric/orderer/common/server.Start(0x1013e09, 0x5, 0xc00054f200)
/opt/gopath/src/github.com/hyperledger/fabric/orderer/common/server/main.go:98 +0xcd
github.com/hyperledger/fabric/orderer/common/server.Main()
/opt/gopath/src/github.com/hyperledger/fabric/orderer/common/server/main.go:91 +0x1ce
main.main()
/opt/gopath/src/github.com/hyperledger/fabric/orderer/main.go:15 +0x20
Я проверил файлы сертификатов CA и имею следующий атрибут:
X509v3 Основные ограничения: критический CA: TRUE,pathlen: 0
Я создал блок genesis с configtxgen, указывающим на папки, следующие общей структуре
Также я использую матрицу CA
РЕДАКТИРОВАТЬ 1:
Итак, я создавал сеть, а не использовал криптоген с использованием центра сертификации, я следовал руководству структуры, как создавать сертификаты, и вот что я сделал:
export FABRIC_CA_CLIENT_HOME=$HOME/Code/dockerimages/hyperledgerfabric/fabric-ca/clients/admin
./fabric-samples/bin/fabric-ca-client enroll -u https://admin:adminpw@localhost:7054 --tls.certfiles ./tls-cert.pem
./fabric-samples/bin/fabric-ca-client register --id.name peer0.example.com --id.type peer --id.affiliation example.operations --tls.certfiles ./tls-cert.pem
export FABRIC_CA_CLIENT_HOME=$HOME/Code/dockerimages/hyperledgerfabric/crypto-config/peerOrganizations/example.com/peers/peer0
./fabric-samples/bin/fabric-ca-client enroll -u https://peer0.example.com:aTSKHAhxxrIl@localhost:7054 --tls.certfiles ./tls-cert.pem -M $FABRIC_CA_CLIENT_HOME/msp
export FABRIC_CA_CLIENT_HOME=$HOME/Code/dockerimages/hyperledgerfabric/fabric-ca/clients/admin
./fabric-samples/bin/fabric-ca-client register --id.name peer1.example.com --id.type peer --id.affiliation example.operations --tls.certfiles ./tls-cert.pem
export FABRIC_CA_CLIENT_HOME=$HOME/Code/dockerimages/hyperledgerfabric/crypto-config/peerOrganizations/example.com/peers/peer1
./fabric-samples/bin/fabric-ca-client enroll -u https://peer1.example.com:ptPLWOAudqNJ@localhost:7054 --tls.certfiles ./tls-cert.pem -M $FABRIC_CA_CLIENT_HOME/msp
export FABRIC_CA_CLIENT_HOME=$HOME/Code/dockerimages/hyperledgerfabric/fabric-ca/clients/admin
./fabric-samples/bin/fabric-ca-client register --id.name orderer0.example.com --id.type orderer --id.affiliation example.operations --tls.certfiles ./tls-cert.pem
export FABRIC_CA_CLIENT_HOME=$HOME/Code/dockerimages/hyperledgerfabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0
./fabric-samples/bin/fabric-ca-client enroll -u https://orderer0.example.com:WfEfUodXgjDI@localhost:7054 --tls.certfiles ./tls-cert.pem -M $FABRIC_CA_CLIENT_HOME/msp
После регистрации всех пиров и заказчиков я начал создавать артефакты с помощью следующих команд
export CHANNEL_NAME=examplechannel
./fabric-samples/bin/configtxgen -profile OrdererGenesis -outputBlock ./config/genesis.block -channelID $CHANNEL_NAME
./fabric-samples/bin/configtxgen -profile ExampleChannel -outputCreateChannelTx ./config/channel.tx -channelID $CHANNEL_NAME
./fabric-samples/bin/configtxgen -profile ExampleChannel -outputAnchorPeersUpdate ./config/ExampleMSPanchors.tx -channelID $CHANNEL_NAME -asOrg Example
Все это с использованием структуры папок с крипто-материалами, подобной этой:
- ordererOrganizations
- example.com
- msp
- admincerts (the certificates of the administrators of that organization)
- cacerts (the ca certificates of the organization)
- tlscacerts (the tls certificate)
- signcerts
- peerOrganizations
- example.conm
- msp
- admincerts (the certificates of the administrators of that organization)
- cacerts (the ca certificates of the organization)
- tlscacerts (the tls certificate)
- signcerts
РЕДАКТИРОВАТЬ2:
Так что это пара вещей.Я использую фабричный CA без какого-либо внешнего сертификата и включенного TLS, поэтому при начальной загрузке он создает весь криптографический материал.Чтобы найти проблему, я сравнивал, расшифровывал материал, созданный инструментом cryptogen, и ткань, содержащую материал, я использовал эту сеть https://certlogik.com/decoder/. Все, кроме сертификата tls, имеют одинаковые атрибуты.Объект, созданный инструментом cryptogen, имеет следующее свойство true:
X509v3 Основные ограничения: критический CA: TRUE
Но объект, созданный фабрикой ca, имеет атрибут false, так что естьсвойство, которое определяет это, и я не настроил или это ошибка?
РЕДАКТИРОВАТЬ 3:
Так что благодаря @gari, а также людям в чате Hyperledger, я пришел крешение.Я ошибся в tls, созданном CA, с tlsca, которые являются двумя отдельными вещами.
TLSCA должны быть распределены вне полосы.Настройте сервер nginx на сервере CA и предоставьте им реальный публичный http-запрос, поддерживаемый cacert, рассмотрите их по кругу, используйте sneaker net, что бы там ни было, чтобы получить его непосредственно с сервера c помощью curl, но для этого нужно отключить проверку ca
A позволяет выполнять шифрование, но вам нужен отдельный сервер nginx или эквивалентный набор для обслуживания непубличных tlsca.Или вы можете просто использовать LE-сертификат для самой tlsca, но это будет отстой, потому что вам придется повторять каждый канал каждый раз, когда tlsca была обновлена с позволяет шифровать.