The [_node-rendezvous_](https://github.com/TheThingSystem/node-rendezvous2) package is a general purpose stand-alone package allowing rendezvous for 'hidden servers' (behind firewalls/NATs) and 'mobile clients' using a third-party service. The source code is [available on GitHub](https://github.com/TheThingSystem/node-rendezvous2) It is used by the _steward_ software for this purpose, however it is not tied to the _steward_ code base. The package implements an HTTP-specific protocol that will allow an HTTP connection from the mobile client to the hidden server. ##Protocol The hidden server uses HTTPS and the *CONNECT* method both to authenticate itself and wait for a rendezvous. The mobile client establishes an HTTPS connection to the rendezvous server, and specifies the identity of the hidden server. At this point the rendezvous server moves the octets back-and-forth. A [[detail description of the Rendezvous protocol|Rendezvous-Protocol]] is available. ##Setup The protocol may be provisioned using a [PAAS](http://en.wikipedia.org/wiki/Platform_as_a_service) provider, _if_ that service transparently supports the HTTP *CONNECT* method. Otherwise, deployment must be provisioned using a [VPS](http://en.wikipedia.org/wiki/Virtual_private_server). Please follow the [[setup instructions for VPS provisioning|Setting-Up-the-Rendezvous-Server]] to deploy the service. ##The Security Model The security model is: 1. The hidden server and the mobile client have to know the domain-name or IP-address of the rendezvous server, and have to trust the certificate used by the rendezvous server. This knowledge and trust is determined by out-of-band means. 2. The hidden server and rendezvous server must share a time-based secret. This is how the rendezvous server knows that the hidden server is allowed to respond to requests for a particular UUID. This shared secret is created by out-of-band means. 3. The mobile client does not need to authenticate itself to the rendezvous server. If a hidden server is responding for a particular UUID, then amy mobile client knowing the UUID is allowed to initiate a connection to that hidden server. 4. __Most importantly:__ it is the responsibility of the hidden server to authenticate the mobile client once the rendezvous occurs. Although there are many well-reasoned arguments as to why hiding behind a firewall is a bad thing, please do not negate the one good thing about being behind a firewall or NAT! [![Analytics](https://ga-beacon.appspot.com/UA-44378714-2/TheThingSystem/steward/wiki/Node-Rendezvous)](https://github.com/igrigorik/ga-beacon)