J'ai un client qui établira une connexion TLS à un service backend.
Il y a deux situations que j'ai rencontrées.
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)
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.
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!