Heim > Backend-Entwicklung > Golang > So senden Sie Client Hello über einen HTTP-Proxy-Tunnel

So senden Sie Client Hello über einen HTTP-Proxy-Tunnel

王林
Freigeben: 2024-02-12 18:06:15
nach vorne
522 Leute haben es durchsucht

如何通过 http 代理隧道发送 Client Hello

Frageninhalt

Ich habe einen Client, der eine TLS-Verbindung zu einem Backend-Dienst aufbaut.

Es gibt zwei Situationen, denen ich begegnet bin.

  1. Direkte Verbindung zum Netzwerk: Client --->Server

    In dieser Umgebung stellt der Client eine direkte Verbindung zum Server her, wie im folgenden Code gezeigt.

var d tls.dialer
   //...
   d.config = &tls.config{
        //...
   }
   //...
   c1 := d.dial("tcp", addr)
Nach dem Login kopieren
  • Proxy-Netzwerk: Client--->Proxy--->Server

    In dieser Umgebung befindet sich der Client hinter einem HTTP-Proxy und muss den Proxy-HTTP-Tunnel verwenden, um den Datenverkehr zwischen dem Client und dem Server weiterzuleiten.

    Ich verwende golang.org/x/net/proxy auf der Clientseite, um eine Verbindung zum Proxy herzustellen. Da es sich bei dem Proxy um einen HTTP-Proxy handelt, sollte der Client net.dialer verwenden, um über TCP eine Verbindung zum Proxy herzustellen.

  • dailer, err := proxy.FromURL(proxy, &net.Dialer{
            Timeout:   TCP_CONNECT_TIMEOUT,
            KeepAlive: TCP_KEEPALIVE_TIMEOUT,
        })
       c2 := dailer.Dial("tcp", addr)
    Nach dem Login kopieren

    Fall 1: Der Client startet die TLS-Verbindung. Im Netzwerkverkehrspaket löst der Client die TCP-Verbindung aus. Nach 3 Handshakes sendet der Client client hello an den Server.

    In Fall 2 verwendet der Client zunächst TCP, um eine Verbindung zum HTTP-Proxy herzustellen (z. B. 10.0.0.1:8080), sendet dann connect an den Proxy und der Proxy gibt dann connectionestablished zurück , aber der Client sendet connect到代理,然后代理返回connectionestablished,但是客户端发送client hello an den Server.

    Für Fall 2 weiß ich nicht, wie und wo ich den Versand auf der Clientseite umsetzen soll client hello?

    Vielen Dank im Voraus.

    Lösung

    Nachdem ich go doc durchsucht habe, habe ich die Lösung gefunden. Ich hoffe, dass sie für Menschen nützlich sein wird, die später auf ähnliche Probleme stoßen.

    In tls gibt es eine Funktion Client, die aus einem bestehenden Netzwerk aufgebaut werden kann. Conn, dann verwenden Sie Handshake

    tlsConn := tls.Client(conn, &tls.Config{
        Certificates:       []tls.Certificate{*cert},
        InsecureSkipVerify: true,
        ServerName:         sni,
        ClientAuth:         tls.RequestClientCert,
    })
    err = tlsConn.Handshake()
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonSo senden Sie Client Hello über einen HTTP-Proxy-Tunnel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Quelle:stackoverflow.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage