Любая помощь будет принята с благодарностью.
Я пытаюсь настроить клиент Node.js для выполнения транзакций. TLS полностью включен. У меня нет проблем с вызовом кода и выполнением транзакции с использованием контейнера fabri c -tools docker. Однако я не могу, не знаю, где и как установить ВСЕ параметры для моего Node.js клиента, который я установил в качестве переменных среды для своего контейнера fabri c -tools docker. Я постоянно получаю ошибку TLS Handshake. Я не смог найти какой-либо пример сопоставления, в котором один и тот же вызов цепного кода был выполнен с использованием контейнера fabri c -tools docker и с использованием Node.js ...
в Node.js примерах некоторые параметры устанавливаются в соединении. json, некоторые параметры устанавливаются непосредственно в коде JavaScript, имена параметров не соответствуют 100% именам переменных среды в контейнере docker, что делает поиск в Google также немного трудно для меня.
В моем docker -компонентном файле для CLI установлены следующие переменные env:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- FABRIC_LOGGING_SPEC=info
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=hyperledger_exchange_net
- CORE_PEER_ID=cli-org1
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false
- CORE_PEER_PROFILE_ENABLED=true
- CORE_PEER_MSPCONFIGPATH=/home/crypto/peerOrganizations/org1/users/Admin@org1/msp
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_CERT_FILE=/home/crypto/peerOrganizations/org1/peers/peer0.org1/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/home/crypto/peerOrganizations/org1/peers/peer0.org1/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/home/crypto/peerOrganizations/org1/peers/peer0.org1/tls/ca.crt
- CORE_PEER_ADDRESS=peer0:7051
- CORE_PEER_CHAINCODEADDRESS=peer0:7052
- CORE_CHAINCODE_KEEPALIVE=10
Работает следующий вызов с использованием fabri c -tools:
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" ^
-e "CORE_PEER_MSPCONFIGPATH=/home/crypto/peerOrganizations/org1/users/Admin@org1/msp" ^
-e "CORE_PEER_TLS_CERT_FILE=/home/crypto/peerOrganizations/org1/peers/peer0.org1/tls/server.crt" ^
-e "CORE_PEER_TLS_KEY_FILE=/home/crypto/peerOrganizations/org1/peers/peer0.org1/tls/server.key" ^
-e "CORE_PEER_TLS_ROOTCERT_FILE=/home/crypto/peerOrganizations/org1/peers/peer0.org1/tls/ca.crt" ^
-e "CORE_PEER_ADDRESS=peer0:7051" ^
-e "CORE_PEER_CHAINCODEADDRESS=peer0:7052" ^
b8fc94760932 peer chaincode invoke -o orderer1:7050 -C data-channel -n exchange-blockchain ^
-c "{\"function\":\"queryAllPressEntries\",\"Args\":[]}" ^
--tls --keyfile /home/crypto/peerOrganizations/org1/users/Admin@org1/msp/keystore/priv_sk --cafile /home/crypto/ordererOrganizations/exchange/tlsca/tlsca.exchange-cert.pem -o orderer1:7050
Как только я переключаюсь на Node.js, понятия не имею :) Вот как выглядит мое соединение. json для приложения Node.js прямо сейчас:
{
"name": "exchange-blockchain",
"version": "1.0.0",
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
},
"connection-options": {
"grpc.max_receive_message_length": -1,
"grpc.max_send_message_length": -1,
"grpc.keepalive_time_ms": 120000,
"grpc.http2.min_time_between_pings_ms": 120000,
"grpc.keepalive_timeout_ms": 20000,
"grpc.http2.max_pings_without_data": 0,
"grpc.keepalive_permit_without_calls": 1
}
}
},
"channels": {
"data-channel": {
"orderers": [
"orderer1"
],
"peers": {
"peer0": {}
}
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0"
],
"certificateAuthorities": [
"ca-org1"
],
"adminPrivateKey": {
"path": "certs/admin/priv_sk"
},
"signedCert" : {
"path" : "certs/admin/Admin@org1-cert.pem"
}
},
"orderers": {
"orderer1": {
"url": "grpcs://ORDERER_IP:7050",
"tlsCACerts": {
"path": "certs/admin/orderer_ca.crt"
},
"grpcOptions": {
"ssl-target-name-override": "orderer1"
}
}
},
"peers": {
"peer0": {
"url": "grpcs://PEER_IP:7051",
"tlsCACerts": {
"path": "certs/admin/tlsca-org1.org1-cert.pem"
},
"grpcOptions": {
"ssl-target-name-override": "peer0"
}
}
},
"certificateAuthorities": {
"ca-org1": {
"url": "http://CA_IP:7054",
"caName": "ca-org1"
}
}
}
Часть «тестового» сценария, которая завершается с ошибкой в channel.getChannelConfig ():
const walletPath = 'wallet';
const user = 'Admin';
const userCertPath = 'certs/admin/ca-org1.org1-cert.pem';
const userKeyPath = 'certs/admin/priv_sk';
const clientKeyPath = 'certs/admin/client.key';//fs.readFileSync(path.join(__dirname, 'somepath/tls/client.key'));
const clientCertPath = 'certs/admin/client.crt'; //fs.readFileSync(path.join(__dirname, 'somepath/tls/client.crt'));
const serverCertPath = 'certs/admin/tlsca-org1.org1-cert.pem';
const mspID = 'Org1MSP';
...
const walletPath = path.join(process.cwd(), 'wallet');
const wallet = new FileSystemWallet(walletPath);
console.log(`Wallet path: ${walletPath}`);
let identity;
let userCertPemRead = fs.readFileSync(userCertPath).toString('utf8');
let userPrvKeyPemRead = fs.readFileSync(userKeyPath).toString('utf8');
let clientKey = fs.readFileSync(clientKeyPath);
let clientCert = fs.readFileSync(clientCertPath);
let serverCert = fs.readFileSync(serverCertPath);
//client.setTlsClientCertAndKey(Buffer.from(clientCert).toString(), Buffer.from(clientKey).toString());
identity = X509WalletMixin.createIdentity(mspID, userCertPemRead, userPrvKeyPemRead);
await wallet.import(user, identity);
// Create a new gateway for connecting to our peer node.
const gateway = new Gateway();
const opts = {
wallet: wallet,
identity: 'Admin',
discovery: {enabled: false, asLocalhost: false},
clientTlsIdentity: 'Admin'
};
await gateway.connect(ccp, opts);
const client = await gateway.getClient();
client.setTlsClientCertAndKey(Buffer.from(clientCert).toString(), Buffer.from(clientKey).toString());
const channel = client.getChannel("data-channel");
await channel.getChannelConfig();
Ошибка в CLI:
E0401 16:58:23.845000000 7572 ssl_transport_security.cc:1245] Handshake failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.
Failed to evaluate transaction: Error: 14 UNAVAILABLE: failed to connect to all addresses
Ошибка в одноранговом узле:
2020-04-01 15:03:39.659 UTC [core.comm] ServerHandshake -> ERRO 6ef38 TLS handshake failed with error EOF server=PeerServer remoteaddress=
Каковы имена соответствующих конфигов, переменных, объектов, которые в моем случае нужно настроить Node.js на работу?