Контейнер цепочки не может подключиться к локальному узлу из-за сертификата, подписанного неизвестным органом
Прежде всего, я хотел бы отметить, что моя установка работает как шарм, когда не включен TLS. Это работает даже в Docker Swarm на AWS.
Проблема начинается, когда я включаю TLS. Когда я развертываю свой файл.bna через Composer, мой недавно созданный контейнер цепного кода создает следующие журналы:
2017-08-23 13:14:16.389 UTC [Composer] Info -> INFO 001 Setting the Composer pool size to 8
2017-08-23 13:14:16.402 UTC [shim] userChaincodeStreamGetter -> ERRO 002 Error trying to connect to local peer: x509: certificate signed by unknown authority
Error starting chaincode: Error trying to connect to local peer: x509: certificate signed by unknown authority
Забавно то, что это работает при развертывании.bna через площадку композитора (когда TLS все еще включен в моей структуре)...
Ниже мой профиль подключения:
{
"name": "test",
"description": "test",
"type": "hlfv1",
"orderers": [
{
"url": "grpcs://orderer.company.com:7050",
"cert": "-----BEGIN CERTIFICATE-----blabla1\n-----END CERTIFICATE-----\n"
}
],
"channel": "channelname",
"mspID": "CompanyMSP",
"ca": {
"url": "https://ca.company.com:7054",
"name": "ca-company",
"trustedRoots": [
"-----BEGIN CERTIFICATE-----\nblabla2\n-----END CERTIFICATE-----\n"
],
"verify": true
},
"peers": [
{
"requestURL": "grpcs://peer0.company.com:7051",
"eventURL": "grpcs://peer0.company.com:7053",
"cert": "-----BEGIN CERTIFICATE-----\nbalbla3\n-----END CERTIFICATE-----\n"
}
],
"keyValStore": "/home/composer/.composer-credentials",
"timeout": 300
}
Мои сертификаты были созданы cryptogen
инструмент, следовательно:
- orderers.0.cert содержит значение
crypto-config/ordererOrganizations/company.com/orderers/orderer.company.com/msp/tlscacerts/tlsca.company.com-cert.pem
- peers.0.cert содержит значение
crypto-config/peerOrganizations/company.com/peers/peer0.company.com/msp/tlscacerts/tlsca.company.com-cert.pem
- ca.trustedRoots.0 содержит
crypto-config/peerOrganizations/company.com/peers/peer0.company.com/tls/ca.crt
У меня такое чувство, что мой доверенный сертификат неверен...
ОБНОВЛЕНИЕ Когда я делаю docker inspect chaincode_container
Я вижу, что он пропускает переменную ENV: CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/peer.crt
в то время как у контейнера цепочки кода, развернутого через игровую площадку, он есть...
1 ответ
Когда образ цепного кода создается, сертификат TLS, который он использует для создания доверенных корней, является rootcert из:
# TLS Settings
# Note that peer-chaincode connections through chaincodeListenAddress is
# not mutual TLS auth. See comments on chaincodeListenAddress for more info
tls:
enabled: false
cert:
file: tls/server.crt
key:
file: tls/server.key
rootcert:
file: tls/ca.crt
Сертификат TLS, который узел использует для запуска службы gRPC, является сертификатом.
Кстати - Вы используете код ветки релиза, а не тот, что в master - это правильно?