proxy - -->Serveur Dans cet environnement, le client est derrière le proxy http et le client doit utiliser le tunnel http proxy dans"/> proxy - -->Serveur Dans cet environnement, le client est derrière le proxy http et le client doit utiliser le tunnel http proxy dans">

Maison >développement back-end >Golang >Comment envoyer Client Hello via le tunnel proxy http

Comment envoyer Client Hello via le tunnel proxy http

王林
王林avant
2024-02-12 18:06:15493parcourir

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

Contenu de la question

J'ai un client qui établira une connexion TLS à un service backend.

Il y a deux situations que j'ai rencontrées.

  1. Connexion directe au réseau : client --->serveur

    Dans cet environnement, le client se connecte directement au serveur, comme indiqué dans le code suivant.

var d tls.dialer
   //...
   d.config = &tls.config{
        //...
   }
   //...
   c1 := d.dial("tcp", addr)
  1. Réseau proxy : client--->proxy--->serveur

    Dans cet environnement, le client se trouve derrière un proxy http et doit utiliser le tunnel http proxy pour transférer le trafic entre le client et le serveur.

    J'utilise golang.org/x/net/proxy côté client pour me connecter au proxy, puisque le proxy est un proxy http, le client doit utiliser net.dialer pour se connecter au proxy via TCP.

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

Cas 1, le client démarre la connexion tls. Dans le paquet de trafic réseau, le client déclenche la connexion TCP Après 3 poignées de main, le client envoie client hello au serveur.

Dans le cas 2, le client utilise d'abord TCP pour se connecter au proxy http (par exemple 10.0.0.1:8080), puis envoie connect au proxy, puis le proxy renvoie connectionestablished , Mais le clientenvoie connect到代理,然后代理返回connectionestablished,但是客户端发送client hello au serveur.

Pour le cas2, je ne sais pas comment et où mettre en œuvre l'envoi côté client client hello ?

Merci d'avance.

Solution

Après avoir cherché go doc, j'ai trouvé la solution, j'espère qu'elle sera utile aux personnes qui rencontreront des problèmes similaires plus tard.

Dans tls, il y a une fonction client qui peut être construite à partir d'un réseau existant. Conn, puis utilise Handshake

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer