Ist es möglich, HTTPS-Verbindungen über Proxy-Server herzustellen? Wenn ja, welche Art von Proxy-Server erlaubt dies?
Dupliziert mit Wie verwende ich Socks 5-Proxy mit Apache HTTP Client 4?
TLS/SSL (das S in HTTPS) garantiert, dass zwischen Ihnen und dem Server, mit dem Sie Kontakt aufnehmen, keine Lauschangriffe stattfinden, d. H. Keine Proxys. Normalerweise verwenden Sie CONNECT
, um eine TCP) - Verbindung über den Proxy herzustellen. In diesem Fall kann der Proxy keine Leseoperationen zwischenspeichern , oder ändere Anfragen/Antworten und sei daher eher nutzlos.
Wenn Sie möchten, dass der Proxy Informationen lesen kann, können Sie wie folgt vorgehen:
Ein Beispiel ist Squids SSL-Bump . Ebenso kann rülpsen kann konfiguriert werden um dies zu tun. Dies wurde auch in einem weniger gutartigen Kontext von einem ägyptischen ISP verwendet .
Beachten Sie, dass moderne Websites und Browser HPKP oder integrierte Zertifikatspins verwenden können, um diesen Ansatz zu umgehen.
Die kurze Antwort lautet: Es ist möglich und kann entweder mit einem speziellen HTTP-Proxy oder einem SOCKS-Proxy erfolgen.
In erster Linie verwendet HTTPS SSL/TLS, das durch die Einrichtung eines sicheren Kommunikationskanals über einen unsicheren Ende-zu-Ende-Sicherheit gewährleistet. Wenn der HTTP-Proxy den Inhalt sehen kann, handelt es sich um einen Man-in-the-Middle-Lauscher, der das Ziel von SSL/TLS übertrifft. Es müssen also einige Streiche gespielt werden, wenn wir über einen einfachen HTTP-Proxy Proxy-Verbindungen herstellen möchten.
Der Trick ist, dass wir einen HTTP-Proxy mit einem speziellen Befehl namens CONNECT
in einen TCP) - Proxy verwandeln. Nicht alle HTTP-Proxys unterstützen diese Funktion, aber viele tun Sie dies jetzt. Der TCP Proxy kann den HTTP-Inhalt nicht im Klartext übertragen sehen, dies hat jedoch keine Auswirkung auf die Möglichkeit, Pakete hin und her weiterzuleiten. Auf diese Weise können Client und Server kommunizieren Mit Hilfe des Proxys können Sie auf sichere Weise HTTPS-Daten austauschen.
Es gibt auch eine unsichere Methode, bei der der HTTP-Proxy zum Man-in-the-Middle wird. Es empfängt die vom Client initiierte Verbindung und initiiert dann eine weitere Verbindung zum realen Server. In einem gut implementierten SSL/TLS wird der Client benachrichtigt, dass der Proxy nicht der echte Server ist. Daher muss der Client dem Proxy vertrauen, indem er die Warnung ignoriert, damit alles funktioniert. Danach entschlüsselt der Proxy einfach Daten von einer Verbindung, verschlüsselt sie neu und leitet sie in die andere weiter.
Schließlich können wir HTTPS sicher über einen SOCKS -Proxy vertreten, da der SOCKS-Proxy auf einer niedrigeren Ebene arbeitet. Sie können sich einen SOCKS-Proxy sowohl als TCP als auch als UDP-Proxy vorstellen.
soweit ich mich erinnern kann, müssen Sie eine HTTP CONNECT-Abfrage auf dem Proxy verwenden. Dadurch wird die Anforderungsverbindung in einen transparenten TCP/IP-Tunnel konvertiert.
sie müssen also wissen, ob der von Ihnen verwendete Proxy-Server dieses Protokoll unterstützt.
Wenn es immer noch von Interesse ist, finden Sie hier eine Antwort auf eine ähnliche Frage: HTTP-Proxy in HTTPS-Proxy in Twisted konvertieren
So beantworten Sie den zweiten Teil der Frage:
Wenn ja, welche Art von Proxy-Server erlaubt dies?
Standardmäßig sind die meisten Proxyserver so konfiguriert, dass HTTPS-Verbindungen nur zu Port 443 zugelassen werden, sodass https-URIs mit benutzerdefinierten Ports nicht funktionieren. Dies ist in der Regel je nach Proxy-Server konfigurierbar. Dies wird beispielsweise von Squid und TinyProxy unterstützt.
Hier ist mein vollständiger Java Code, der sowohl HTTP- als auch HTTPS-Anforderungen mit SOCKS-Proxy unterstützt.
import Java.io.IOException;
import Java.net.InetSocketAddress;
import Java.net.Proxy;
import Java.net.Socket;
import Java.nio.charset.StandardCharsets;
import org.Apache.http.HttpHost;
import org.Apache.http.client.methods.CloseableHttpResponse;
import org.Apache.http.client.methods.HttpGet;
import org.Apache.http.client.protocol.HttpClientContext;
import org.Apache.http.config.Registry;
import org.Apache.http.config.RegistryBuilder;
import org.Apache.http.conn.socket.ConnectionSocketFactory;
import org.Apache.http.conn.socket.PlainConnectionSocketFactory;
import org.Apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.Apache.http.impl.client.CloseableHttpClient;
import org.Apache.http.impl.client.HttpClients;
import org.Apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.Apache.http.protocol.HttpContext;
import org.Apache.http.ssl.SSLContexts;
import org.Apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext;
/**
* How to send a HTTP or HTTPS request via SOCKS proxy.
*/
public class ClientExecuteSOCKS {
public static void main(String[] args) throws Exception {
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", new MyHTTPConnectionSocketFactory())
.register("https", new MyHTTPSConnectionSocketFactory(SSLContexts.createSystemDefault
()))
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg);
try (CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(cm)
.build()) {
InetSocketAddress socksaddr = new InetSocketAddress("mysockshost", 1234);
HttpClientContext context = HttpClientContext.create();
context.setAttribute("socks.address", socksaddr);
HttpHost target = new HttpHost("www.example.com/", 80, "http");
HttpGet request = new HttpGet("/");
System.out.println("Executing request " + request + " to " + target + " via SOCKS " +
"proxy " + socksaddr);
try (CloseableHttpResponse response = httpclient.execute(target, request, context)) {
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
System.out.println(EntityUtils.toString(response.getEntity(), StandardCharsets
.UTF_8));
}
}
}
static class MyHTTPConnectionSocketFactory extends PlainConnectionSocketFactory {
@Override
public Socket createSocket(final HttpContext context) throws IOException {
InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address");
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr);
return new Socket(proxy);
}
}
static class MyHTTPSConnectionSocketFactory extends SSLConnectionSocketFactory {
public MyHTTPSConnectionSocketFactory(final SSLContext sslContext) {
super(sslContext);
}
@Override
public Socket createSocket(final HttpContext context) throws IOException {
InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address");
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr);
return new Socket(proxy);
}
}
}
tunneling von HTTPS durch SSH (Linux-Version):
1) turn off using 443 on localhost
2) start tunneling as root: ssh -N [email protected]_server -L 443:target_ip:443
3) adding 127.0.0.1 target_domain.com to /etc/hosts
alles was du auf localhost machst. dann:
target_domain.com is accessible from localhost browser.
Sie können dies mithilfe von Man-in-the-Middle-Techniken mit dynamischer SSL-Generierung erreichen. Schauen Sie sich mitmproxy an - es ist ein auf Python basierender, SSL-fähiger MITM-Proxy.
Ich glaube nicht, dass "HTTPS-Verbindungen über Proxy-Server" den Man-in-the-Middle-Angriffstyp eines Proxy-Servers bedeutet. Ich denke, es fragt sich, ob man über TLS eine Verbindung zu einem HTTP-Proxy-Server herstellen kann. Und die Antwort lautet ja.
Ist es möglich, HTTPS-Verbindungen über Proxy-Server herzustellen?
Ja, meine Frage und Antwort finden Sie hier. HTTPs Proxy Server funktioniert nur in SwitchOmega
Wenn ja, welche Art von Proxy-Server erlaubt dies?
Die Art des Proxyservers stellt SSL-Zertifikate bereit, wie dies bei normalen Websites der Fall ist. Sie benötigen jedoch eine pac
-Datei, damit der Browser die Proxy-Verbindung über SSL konfigurieren kann.
Ich hatte es versucht
ssh -N -D 12345 [email protected]_server
localhost:12345
dies führte jedoch zu dem Fehler "Unsichere Verbindung", wenn ich versuchte, eine Verbindung zu einer https-Website herzustellen.
Die Lösung war zu
Referenz aus der Dokumentation von Digital Ocean
So leiten Sie Webdatenverkehr ohne VPN mithilfe eines SOCKS-Tunnels sicher weiter