Reputation: 31
PLEASE HELP ME
For days I haven't been able to understand why I can't configure my hyperledger fabric network with secure SSL communication, due to certificate errors.
I provide you with all the files I use:
network.json (config file for the network)
{
"name": "Modbus2Chain",
"description": "Modbus2Chain Project course for IoT security and Data security",
"version": "0.1",
"client": {
"organization": "Org1",
"credentialStore": {
"path": "/tmp/hfc-kvs",
"cryptoStore": {
"path": "/tmp/hfc-cvs"
},
"wallet": "wallet-name"
}
},
"organizations": {
"orderer0.modbus2chain.com":{
"mspid":"OrdererMSP",
"orderers": [
"orderer.modbus2chain.com"
],
"certificateAuthorities": [
"ca-orderer"
],
"users": {
"Admin": {
"cert": "../crypto-material/ordererOrganizations/modbus2chain.com/users/[email protected]/msp/signcerts/[email protected]",
"private_key": "../crypto-material/ordererOrganizations/modbus2chain.com/users/[email protected]/msp/keystore/priv_sk"
}
}
},
"org1.modbus2chain.com": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.modbus2chain.com"
],
"certificateAuthorities": [
"ca-org1"
],
"users": {
"Admin": {
"cert": "../crypto-material/peerOrganizations/org1.modbus2chain.com/users/[email protected]/msp/signcerts/[email protected]",
"private_key": "../crypto-material/peerOrganizations/org1.modbus2chain.com/users/[email protected]/msp/keystore/priv_sk"
}
}
},
"org2.modbus2chain.com": {
"mspid": "Org2MSP",
"peers": [
"peer0.org2.modbus2chain.com"
],
"certificateAuthorities": [
"ca-org2"
],
"users": {
"Admin": {
"cert": "../crypto-material/peerOrganizations/org2.modbus2chain.com/users/[email protected]/msp/signcerts/[email protected]",
"private_key": "../crypto-material/peerOrganizations/org2.modbus2chain.com/users/[email protected]/msp/keystore/priv_sk"
}
}
},
"org3.modbus2chain.com": {
"mspid": "Org3MSP",
"peers": [
"peer0.org3.modbus2chain.com"
],
"certificateAuthorities": [
"ca-org3"
],
"users": {
"Admin": {
"cert": "../crypto-material/peerOrganizations/org3.modbus2chain.com/users/[email protected]/msp/signcerts/[email protected]",
"private_key": "../crypto-material/peerOrganizations/org3.modbus2chain.com/users/[email protected]/msp/keystore/priv_sk"
}
}
}
},
"orderers": {
"orderer0.modbus2chain.com": {
"url": "localhost:7050",
"grpcOptions": {
"grpc.ssl_target_name_override": "orderer.modbus2chain.com",
"grpc-max-send-message-length": 15
},
"tlsCACerts": {
"path": "../crypto-material/ordererOrganizations/modbus2chain.com/tlsca/tlsca.modbus2chain.com-cert.pem"
}
}
},
"peers": {
"peer0.org1.modbus2chain.com": {
"url": "localhost:7051",
"eventUrl": "localhost:7051",
"grpcOptions": {
"grpc.ssl_target_name_override": "peer0.org1.modbus2chain.com",
"grpc.http2.keepalive_time": 15
},
"tlsCACerts": {
"path": "../crypto-material/peerOrganizations/org1.modbus2chain.com/peers/peer0.org1.modbus2chain.com/msp/tlscacerts/tlsca.org1.modbus2chain.com-cert.pem"
}
},
"peer0.org2.modbus2chain.com": {
"url": "localhost:8051",
"eventUrl": "localhost:8051",
"grpcOptions": {
"grpc.ssl_target_name_override": "peer0.org2.modbus2chain.com",
"grpc.http2.keepalive_time": 15
},
"tlsCACerts": {
"path": "../crypto-material/peerOrganizations/org2.modbus2chain.com/peers/peer0.org2.modbus2chain.com/msp/tlscacerts/tlsca.org2.modbus2chain.com-cert.pem"
}
},
"peer0.org3.modbus2chain.com": {
"url": "localhost:8052",
"eventUrl": "localhost:8052",
"grpcOptions": {
"grpc.ssl_target_name_override": "peer0.org3.modbus2chain.com",
"grpc.http2.keepalive_time": 15
},
"tlsCACerts": {
"path": "../crypto-material/peerOrganizations/org3.modbus2chain.com/peers/peer0.org3.modbus2chain.com/msp/tlscacerts/tlsca.org3.modbus2chain.com-cert.pem"
}
}
},
"certificateAuthorities": {
"ca-org1": {
"url": "https://localhost:9050",
"grpcOptions": {
"verify": false
},
"tlsCACerts": {
"path": "/home/alexcav/go/src/GitHub/Modbus2Chain/crypto-material/peerOrganizations/org1.modbus2chain.com/ca/ca.org1.modbus2chain.com-cert.pem"
},
"registrar": [
{
"enrollId": "admin",
"enrollSecret": "adminpw"
}
]
},
"ca-org2": {
"url": "https://localhost:8051",
"grpcOptions": {
"verify": true
},
"tlsCACerts": {
"path": "../crypto-material/peerOrganizations/org2.modbus2chain.com/ca/org2.modbus2chain.com-cert.pem"
},
"registrar": [
{
"enrollId": "admin",
"enrollSecret": "adminpw"
}
]
},
"ca-org3": {
"url": "https://localhost:8052",
"grpcOptions": {
"verify": true
},
"tlsCACerts": {
"path": "../crypto-material/peerOrganizations/org3.modbus2chain.com/ca/org3.modbus2chain.com-cert.pem"
},
"registrar": [
{
"enrollId": "admin",
"enrollSecret": "adminpw"
}
]
}
}}
Here are the configurations of the Docker containers, for the CA and for the organizations (I provide one to give you an idea):
ca-org1:
version: "3.8"
volumes:
ca-org1.modbus2chain.com:
networks:
apnet:
services:
ca-org1:
container_name: ca-org1.modbus2chain.com
image: hyperledger/fabric-ca
volumes:
- ../crypto-material/caOrganizations/ca-org1.modbus2chain.com/ca/:/etc/hyperledger/fabric-ca-server
- ca-org1.modbus2chain.com:/var/hyperledger/fabric-ca-server-config
- ../crypto-material/peerOrganizations/org1.modbus2chain.com/tlsca:/etc/hyperledger/fabric-ca-server/tlsca
environment:
- FABRIC_CA_SERVER_HOME=/etc/hyperledger/fabric-ca-server
- FABRIC_CA_SERVER_TLS_ENABLED=true
- FABRIC_CA_SERVER_CA_NAME=ca-org1.modbus2chain.com
- FABRIC_CA_SERVER_CSR_CN=rca-org1
- FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
- FABRIC_CA_SERVER_DEBUG=true
- FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server/tlsca/tlsca.org1.modbus2chain.com-cert.pem
- FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server/tlsca/priv_sk
working_dir: /etc/hyperledger/fabric-ca-server
command: /bin/bash -c 'fabric-ca-server start -d -b admin:adminpw --port 9050'
ports:
- 9050:9050
networks:
- apnet
org1:
version: "3.8"
volumes:
peer0.org1.modbus2chain.com:
networks:
apnet:
services:
peer0.org1.modbus2chain.com:
networks:
- apnet
container_name: peer0.org1.modbus2chain.com
image: hyperledger/fabric-peer:2.1
volumes:
- ../crypto-material/peerOrganizations/org1.modbus2chain.com/peers/peer0.org1.modbus2chain.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-material/peerOrganizations/org1.modbus2chain.com/peers/peer0.org1.modbus2chain.com/tls:/etc/hyperledger/fabric/tls
- peer0.org1.modbus2chain.com:/var/hyperledger/production
environment:
# Generic peer variables
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
# Specific peer variables
- CORE_PEER_ID=peer0.org1.modbus2chain.com
- CORE_PEER_ADDRESS=peer0.org1.modbus2chain.com:7051
- CORE_PEER_LISTENADDRESS=0.0.0.0:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.modbus2chain.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.modbus2chain.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_CLIENTAUTHREQUIRED=true
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: peer node start
ports:
- 7051:7051
This is the python code I'm trying to run. I'm using the hyperledger-fabric-py SDK and here is where I instantiate the ca_service to register a new user via my admin:
import os
from hfc.fabric import Client
from hfc.fabric_ca import CAClient
from hfc.util.crypto.crypto import ecies
from hfc.fabric_network.wallet import FileSystenWallet
from hfc.fabric_ca.caservice import ca_service
cli = Client(net_profile="network.json")
org1_admin = cli.get_user(org_name='org1.modbus2chain.com', name='Admin')
print( org1_admin._enrollment)
ca_certs_path="/home/alexcav/go/src/GitHub/Modbus2Chain/crypto-material/caOrganizations/ca-org1.modbus2chain.com/ca/ca-cert.pem"
casvc = ca_service(target="https://localhost:9050", ca_certs_path=ca_certs_path)
adminEnrollment = casvc.enroll("admin","adminpw")
secret = adminEnrollment.register("user1")
user1Enrollment = casvc.enroll("user1", "userpw")
When the code gets to:
casvc = ca_service(target="https://localhost:9050", ca_certs_path=ca_certs_path)
, I get this ERROR. I leave it complete below:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/urllib3-1.26.15-py3.10.egg/urllib3/connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
File "/usr/local/lib/python3.10/dist-packages/urllib3-1.26.15-py3.10.egg/urllib3/connectionpool.py", line 386, in _make_request
self._validate_conn(conn)
File "/usr/local/lib/python3.10/dist-packages/urllib3-1.26.15-py3.10.egg/urllib3/connectionpool.py", line 1042, in _validate_conn
conn.connect()
File "/usr/local/lib/python3.10/dist-packages/urllib3-1.26.15-py3.10.egg/urllib3/connection.py", line 419, in connect
self.sock = ssl_wrap_socket(
File "/usr/local/lib/python3.10/dist-packages/urllib3-1.26.15-py3.10.egg/urllib3/util/ssl_.py", line 449, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(
File "/usr/local/lib/python3.10/dist-packages/urllib3-1.26.15-py3.10.egg/urllib3/util/ssl_.py", line 493, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/lib/python3.10/ssl.py", line 513, in wrap_socket
return self.sslsocket_class._create(
File "/usr/lib/python3.10/ssl.py", line 1071, in _create
self.do_handshake()
File "/usr/lib/python3.10/ssl.py", line 1342, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1007)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/requests-2.28.2-py3.10.egg/requests/adapters.py", line 489, in send
resp = conn.urlopen(
File "/usr/local/lib/python3.10/dist-packages/urllib3-1.26.15-py3.10.egg/urllib3/connectionpool.py", line 787, in urlopen
retries = retries.increment(
File "/usr/local/lib/python3.10/dist-packages/urllib3-1.26.15-py3.10.egg/urllib3/util/retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='localhost', port=9050): Max retries exceeded with url: /enroll (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1007)')))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alexcav/go/src/GitHub/Modbus2Chain/app/fabric.py", line 19, in <module>
adminEnrollment = casvc.enroll("admin","adminpw") # now local will have the admin enrollment
File "/usr/local/lib/python3.10/dist-packages/fabric_sdk_py-0.9.0-py3.10.egg/hfc/fabric_ca/caservice.py", line 484, in enroll
enrollmentCert, caCertChain = self._ca_client.enroll(
File "/usr/local/lib/python3.10/dist-packages/fabric_sdk_py-0.9.0-py3.10.egg/hfc/fabric_ca/caservice.py", line 328, in enroll
res, st = self._send_ca_post(path='enroll',
File "/usr/local/lib/python3.10/dist-packages/fabric_sdk_py-0.9.0-py3.10.egg/hfc/fabric_ca/caservice.py", line 254, in _send_ca_post
r = requests.post(url=self._base_url + path, **param)
File "/usr/local/lib/python3.10/dist-packages/requests-2.28.2-py3.10.egg/requests/api.py", line 115, in post
return request("post", url, data=data, json=json, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/requests-2.28.2-py3.10.egg/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/requests-2.28.2-py3.10.egg/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.10/dist-packages/requests-2.28.2-py3.10.egg/requests/sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/requests-2.28.2-py3.10.egg/requests/adapters.py", line 563, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='localhost', port=9050): Max retries exceeded with url: /enroll (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1007)')))
I appreciate any form of help. Thanks in advance to everyone.
Upvotes: 1
Views: 578