Crates.io | ohttp-relay |
lib.rs | ohttp-relay |
version | 0.0.8 |
source | src |
created_at | 2024-02-19 22:07:11.54262 |
updated_at | 2024-03-27 01:46:45.096905 |
description | Relay Oblivious HTTP requests to protect IP metadata |
homepage | |
repository | https://github.com/payjoin/ohttp-relay |
max_upload_size | |
id | 1145728 |
size | 76,730 |
A rust implementation of an Oblivious HTTP relay resource.
This work is undergoing active revision in the IETF and so are these implementations. Use at your own risk.
Run ohttp-relay by setting PORT
and GATEWAY_ORIGIN
environment vaiables. For example, to relay from port 3000 to an OHTTP Gateway Resource at https://payjo.in
, run the following.
PORT=3000 GATEWAY_ORIGIN='https://payjo.in' cargo run
Alternatively, set UNIX_SOCKET
to bind to a unix socket path instead of a TCP port.
This crate is intended to be run behind a reverse proxy like NGINX that can handle TLS for you. Tests specifically cover this integration using nginx.conf.template
.
The Oblivious HTTP specification requires clients obtain a Key Configuration from the OHTTP Gateway but leaves a mechanism for doing so explicitly unspecified. This feature hosts HTTPS-in-WebSocket and HTTPS-in-CONNECT proxies to allow web clients to GET a gateway's ohttp-keys via Direct Discovery in an end-to-end-encrypted, authenticated manner using the OHTTP relay as a tunnel so as not to reveal their IP address. The bootstrap
feature to host these proxies is enabled by default. The ws-bootstrap
and connect-bootstrap
features enable each proxy individually.
Both bootstrap features enable the server to forward packets directly to and from the OHTTP Gateway's TCP socket to negotiate a TLS session between the client and gateway. By doing so, the OHTTP Relay is prevented from conducting a man-in-the-middle attack to compromise the TLS session.