Skip to content

Instantly share code, notes, and snippets.

@DoctorMcKay
Created July 3, 2021 22:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DoctorMcKay/c9443bbecea2761daa63a5957e61eaa6 to your computer and use it in GitHub Desktop.
Save DoctorMcKay/c9443bbecea2761daa63a5957e61eaa6 to your computer and use it in GitHub Desktop.
// Change the IP address below to your Tesla Gateway's IP
const UPSTREAM_ADDRESS = '192.168.1.100';
// Don't change this unless you know what you're doing
const PROXY_PORT = 32516;
const ChildProcess = require('child_process');
const FS = require('fs');
const OS = require('os');
const TLS = require('tls');
let g_ConnectionId = 0;
console.log('Generating self-signed certificate...');
let opensslOutput = ChildProcess.execSync(`openssl req -x509 -nodes -days 3650 -subj "/C=US/CN=TLSPROXY:${UPSTREAM_ADDRESS}" -keyout - -out -`, {stdio: [null, null, 'ignore']});
opensslOutput = opensslOutput.toString('utf8');
let privkeyStart = opensslOutput.indexOf('-----BEGIN PRIVATE KEY-----');
let privkeyEnd = opensslOutput.indexOf('-----END PRIVATE KEY-----') + '-----END PRIVATE KEY-----'.length;
let certStart = opensslOutput.indexOf('-----BEGIN CERTIFICATE-----');
let certEnd = opensslOutput.indexOf('-----END CERTIFICATE-----') + '-----END CERTIFICATE-----'.length;
let privateKey = opensslOutput.slice(privkeyStart, privkeyStart + privkeyEnd);
let cert = opensslOutput.slice(certStart, certStart + certEnd);
console.log('Creating TLS server...');
let server = TLS.createServer({key: privateKey, cert}, (socket) => {
let id = ++g_ConnectionId;
console.log(`[${id}] Incoming connection from ${socket.remoteAddress}`);
// Establish our upstream connection
let upstreamSocket = TLS.connect({
host: UPSTREAM_ADDRESS,
port: 443,
rejectUnauthorized: false
}, () => {
// Successfully connected
console.log(`[${id}] Upstream connection established`);
socket.pipe(upstreamSocket);
upstreamSocket.pipe(socket);
});
upstreamSocket.on('error', (err) => {
console.log(`[${id}] Upstream connection errored: ${err.message}`);
socket.close();
});
socket.on('error', (err) => {
console.log(`[${id}] Client connection errored: ${err.message}`);
upstreamSocket.close();
});
});
server.listen(PROXY_PORT);
console.log(`Proxy server listening on port ${PROXY_PORT}`);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment