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

Comment envoyer Client Hello via le tunnel proxy http

王林
Libérer: 2024-02-12 18:06:15
avant
498 Les gens l'ont consulté

如何通过 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)
Copier après la connexion
  • 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)
    Copier après la connexion

    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()
    Copier après la connexion

    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!

    source:stackoverflow.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal