FG
📡 Networking

my HTTPS Proxy Server doesn't work!

Freshabout 21 hours ago
Mar 14, 20260 views
Confidence Score51%
51%

Problem

Hi, I have simple problem with https proxy server! I make simple https proxy server (example files) and set my ip/port as proxy server in my browsers (HTTPS proxy server in Safari & SSL proxy in Firefox) but I could not receive any request when I try to open a secure website. I don't have problem with http servers and I can't handle incoming requests but in HTTP(S) websites, it doesn't work for me! simple flow is: 1) running https server on localhost:9000 2) setting http & https proxy in browser 3) no log in https server! when I want open a secure website in browser (like https://google.com) thanks

Unverified for your environment

Select your OS to check compatibility.

1 Fix

Canonical Fix
Unverified Fix
New Fix – Awaiting Verification

Configure HTTPS Proxy Server to Handle SSL Requests

Medium Risk

The HTTPS proxy server is likely not configured to properly handle SSL/TLS connections. When a browser connects to an HTTPS website, it expects the proxy server to establish a secure tunnel using the CONNECT method. If the server does not support this method or is not set up to handle SSL traffic, it will not receive any requests.

Awaiting Verification

Be the first to verify this fix

  1. 1

    Implement CONNECT Method Handling

    Modify your HTTPS proxy server to handle the CONNECT method, which is used by clients to establish a tunnel to the target server. This is essential for forwarding HTTPS traffic.

    javascript
    const http = require('http');
    const net = require('net');
    
    const server = http.createServer();
    
    server.on('connect', (req, clientSocket, head) => {
      const { port, hostname } = new URL(`https://${req.url}`);
      const serverSocket = net.connect(port, hostname, () => {
        clientSocket.write('HTTP/1.1 200 Connection Established\r\n\r\n');
        serverSocket.write(head);
        serverSocket.pipe(clientSocket);
        clientSocket.pipe(serverSocket);
      });
    
      serverSocket.on('error', (err) => {
        console.error('Socket error:', err);
        clientSocket.end();
      });
    });
    
    server.listen(9000);
  2. 2

    Set Up SSL Certificate

    Ensure that your proxy server is using a valid SSL certificate to establish secure connections. If you are using a self-signed certificate, make sure to add it to your browser's trusted certificates.

    javascript
    const fs = require('fs');
    const https = require('https');
    
    const options = {
      key: fs.readFileSync('path/to/your/private-key.pem'),
      cert: fs.readFileSync('path/to/your/certificate.pem')
    };
    
    const httpsServer = https.createServer(options, server);
    httpsServer.listen(9000);
  3. 3

    Test Proxy Configuration

    After implementing the CONNECT method and SSL certificate, test your proxy configuration by visiting an HTTPS website in your browser. Ensure that the proxy settings are correctly pointing to your server.

  4. 4

    Check Logs for Incoming Requests

    Add logging to your proxy server to confirm that it is receiving requests. This will help you troubleshoot any further issues if requests are still not being processed.

    javascript
    console.log('Incoming request:', req.url);

Validation

To confirm the fix worked, attempt to access an HTTPS website through your proxy server. You should see logs indicating incoming requests, and the website should load successfully in your browser.

Sign in to verify this fix

Environment

Submitted by

AC

Alex Chen

2450 rep

Tags

proxyhttpnode.js