cordite/network-map

By cordite

Updated over 5 years ago

a Corda Network Map Service, meeting the protocol, both documented and otherwise.

Image
3

100K+

cordite/network-map repository overview

  • v0.5.1, latest - Corda 4.x compatible release
  • v0.4.4 - latest stable release
  • edge - latest master build, unstable
  • v0.4.4-s390x - s390x base image to run on IBM LinuxOne

Contents

Design criteria and Features

  1. Meet the requirements of the Corda Network Map Service protocol, both documented and otherwise
  2. A nominal implementation of the Doorman protocol
  3. A new protocol, Certman, for registration with client-provided certificates
  4. Completely stateless - capable of running in load-balanced clusters
  5. Efficient use of I/O to serve 5000+ concurrent read requests per second from a modest server
  6. Transparent filesystem design to simplify maintenance, backup, and testing

Backlog of Features, Improvements, and Optimisations

See our issues board for what this networkmap can't do as yet:

https://gitlab.com/cordite/network-map-service/boards

FAQ

See here.

How do I get in touch?

What if something does not work?

We encourage you to raise any issues/bugs you find in Cordite. Please follow the below steps before raising issues:

  1. Check on the Issues backlog to make sure an issue on the topic has not already been raised
  2. Post your question on the #cordite channel on Corda slack
  3. If none of the above help solve the issue, raise an issue following the contributions guide

How do I contribute?

We welcome contributions both technical and non-technical with open arms! There's a lot of work to do here. The Contributing Guide provides more information on how to contribute.

Who is behind the Network Map Service?

Network Map Service is being developed by a group of financial services companies, software vendors and open source contributors. The project is hosted on here on GitLab.

What open source license has this been released under?

All software in this repository is licensed under the Apache License, Version 2.0 (the "License"); you may not use this software except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

How do I start a simple network on my local workstation or laptop?

See the detailed instructions in the FAQ

You can configure the service using -D system properties. See the section for command line parameters.

Command line parameters

PropertyEnv VariableDefaultDescription
auth-passwordNMS_AUTH_PASSWORDadminsystem admin password
auth-usernameNMS_AUTH_USERNAMEsasystem admin username
cache-timeoutNMS_CACHE_TIMEOUT2Shttp cache timeout for this service in ISO 8601 duration format
certmanNMS_CERTMANtrueenable Cordite certman protocol so that nodes can authenticate using a signed TLS cert
certman-pkixNMS_CERTMAN_PKIXfalseenables certman's pkix validation against JDK default truststore
certman-strict-evNMS_CERTMAN_STRICT_EVfalseenables strict constraint for EV certs only in certman
certman-truststoreNMS_CERTMAN_TRUSTSTOREspecified a custom truststore instead of the default JRE cacerts
certman-truststore-passwordNMS_CERTMAN_TRUSTSTORE_PASSWORDtruststore password
dbNMS_DB.dbdatabase directory for this service
doormanNMS_DOORMANtrueenable Corda doorman protocol
hostnameNMS_HOSTNAME0.0.0.0interface to bind the service to
network-map-delayNMS_NETWORK_MAP_DELAY1Squeue time for the network map to update for addition of nodes
param-update-delayNMS_PARAM_UPDATE_DELAY10Sschedule duration for a parameter update
portNMS_PORT8080web port
root-ca-nameNMS_ROOT_CA_NAMECN="", OU=Cordite Foundation Network, O=Cordite Foundation, L=London, ST=London, C=GBthe name for the root ca. If doorman and certman are turned off this will automatically default to Corda dev root ca
tlsNMS_TLSfalsewhether TLS is enabled or not
tls-cert-pathNMS_TLS_CERT_PATHpath to cert if TLS is turned on
tls-key-pathNMS_TLS_KEY_PATHpath to key if TLS turned on

Doorman protocol

This network map supports the Corda doorman protocol. This facility can be disabled with doorman system property or NMS_DOORMAN environment variable.

Retrieving the NetworkMap network-map-truststore.jks

If you wish to use the doorman protocol to register a node as per Corda you will need the network's network-map-truststore.jks.

You can do this using the url <network-map-url>/network-map/truststore.

Certman protocol

This network map provides an alternative means of gaining the required keystore files using any TLS certificate and private key, issued by a formal PKI root CA.

Assuming you have certificate domain.crt and its corresponding private key domain.key, and assuming the network map is bound to http://localhost:8080, the following command line will retrieve the keystore files:

openssl dgst -sha256 -sign domain.key domain.crt | base64 | cat domain.crt - | curl -k -X POST -d @- http://localhost:8080/certman/api/generate -o keys.zip

This essentially signs the certificate with your private key and sends only the certificate and signature to the network-map. If the certificate passes validation, the request returns a zip file of the keystores required by the node. These should be stored in the <node-directory>/certificates.

How do I add a node to a network run using Java?

  • Start the network map service with TLS disabled ($ java -Dtls=false -jar target/network-map-service.jar)
    • If you don't disable TLS and you don't have a valid TLS certificate for the network map service, nodes will not be able to join the network
  • Create a Corda node
  • Point the node to your network map service by adding the following line to the node's node.conf file: compatibilityZoneURL="http://localhost:8080"
  • Download the network root truststore from http://localhost:8080/network-map/truststore and place it in the node's folder under certificates/
  • Register the node with the network map service using java -jar corda.jar --initial-registration --network-root-truststore-password trustpass
  • Start the node using java -jar corda.jar
  • Visit the network map UI at https://localhost:8080 to see the node

Releasing NMS

To release NMS you just need to tag it. It is then released to docker hub.

License

View license information for the software contained in this image.

As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).

As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within.

Tag summary

Content type

Image

Digest

Size

147.9 MB

Last updated

over 5 years ago

docker pull cordite/network-map:v0.4.4-s390x