Wie HTTPS-Verbindungen über Proxy-Server funktionieren: Die CONNECT-Methode

Wie HTTPS-Verbindungen über Proxy-Server funktionieren: Die CONNECT-Methode


Bei der Verwendung eines HTTP-Proxys zur Netzwerkverbindung leitet der Proxy-Server die Client-Anfragen weiter. Da HTTPS jedoch zuerst einen TLS-Handshake erfordert, kann der Proxy-Server die Anfrage nicht direkt weiterleiten und muss zuerst eine Verbindung herstellen.

HTTP-Proxy-Anfrageweiterleitung

Proxy-Server verarbeiten HTTP-Verbindungen (also solche ohne TLS-Verschlüsselung) recht einfach. Wenn ein Client beispielsweise auf example.com zugreifen möchte, sendet er diese Anfrage:

GET http://example.com/index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Proxy-Connection: keep-alive

Diese Anfrage geht zuerst durch den Proxy-Server. Der Proxy analysiert die Ziel-URL und leitet dann die vollständige Anfrage weiter. Nach Erhalt der Antwort leitet er diese an den Client weiter.

HTTPS-Verbindungen

Wenn TLS-Verschlüsselung hinzugefügt wird, wird das Problem komplexer. Der Proxy-Server kann die Client-Anfrage nicht direkt weiterleiten, da er keine TLS-Verbindung mit dem Server im Namen des Clients herstellen kann. Wenn er dies täte, würde der Client TLS-Zertifikatsfehler feststellen.

Die CONNECT-Methode löst dieses Problem. Wie GET ist es eine HTTP-Methode, aber sie wird speziell zum Herstellen von Verbindungen verwendet. So funktioniert es:

  1. Der Client sendet eine CONNECT-Anfrage an den Proxy-Server:

    CONNECT example.com:443 HTTP/1.1
    Host: example.com
    Proxy-Connection: keep-alive
  2. Nach Erhalt der Anfrage stellt der Proxy-Server eine TCP-Verbindung mit dem Zielserver her und antwortet dann dem Client:

    HTTP/1.1 200 Connection established

    Der Proxy-Server leitet die CONNECT-Anfrage selbst typischerweise nicht an den Zielserver weiter

  3. Danach wird der Proxy-Server zu einem transparenten TCP-Tunnel, der TCP-Pakete blind weiterleitet. An diesem Punkt kann der Client den TLS-Handshake durchführen und HTTPS-Daten übertragen. Da die Daten verschlüsselt sind, kann der Proxy-Server den Kommunikationsinhalt nicht einsehen oder ändern.

    sequenceDiagram
    participant Client
    participant Proxy
    participant Server
    
    Client->>Proxy: CONNECT example.com:443
    Proxy->>Server: TCP Connection
    Server->>Proxy: Connection Established
    Proxy->>Client: HTTP/1.1 200 Connection established
    Note over Client,Server: TLS Handshake
    Note over Client,Server: Encrypted Communication

Aus dem obigen Prozess können wir sehen, dass die CONNECT-Methode tatsächlich einen TCP-Tunnel einrichtet und nicht speziell für TLS konzipiert ist. Daher kann jede TCP-Anfrage durch diesen Tunnel übertragen werden.

Benötigen Transport-Layer-Proxys die CONNECT-Methode?

Für Proxys, die auf der Transportebene (TCP/UDP) arbeiten, wie SOCKS5-Proxys, ist die CONNECT-Methode nicht erforderlich. Dies liegt daran, dass sie TCP- und UDP-Verbindungen direkt verarbeiten und keine Anwendungsprotokolle (wie HTTP) verstehen müssen.

Wenn Clients über diese Proxys auf HTTPS-Websites zugreifen, muss der Proxy-Server nur:

  • Die Verbindungsanfrage des Clients empfangen
  • Eine TCP-Verbindung mit dem Zielserver herstellen
  • Die beiden Verbindungen überbrücken