-
-
Save DoctorMcKay/c9443bbecea2761daa63a5957e61eaa6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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