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


prtyaa
prtyaa 2024-02-12 22:01:22 61938 赞同 0 反对 0
分类: 资源 标签: 运维
问题内容 我有一个客户端将与后端服务建立 tls 连接。

我遇到的情况有两种。

  • 直连网络:客户端—>服务器

    在这种环境下,客户端直接连接到服务器,如下代码。

var d tls.dialer
//…
d.config = &tls.config{
//…
}
//…
c1 := d.dial(“tcp”, addr)

  • 代理网络:客户端—>proxy—>服务器

    在这种环境中,客户端位于http代理后面,客户端需要利用代理http隧道在客户端和服务器之间转发流量。

    我在客户端使用golang.org/x/net/proxy来连接代理,因为代理是http代理,客户端应该使用net.dialer通过tcp连接代理。

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

案例1,客户端启动tls连接,在网络流量数据包中,客户端触发tcp连接,经过3次握手,客户端向服务器发送client hello

在情况2中,客户端首先使用tcp连接http代理(例如10.0.0.1:8080),接下来,发送connect到代理,然后代理返回connectionestablished,但是客户端不发送client hello 到服务器。

对于case2,我不知道如何以及在哪里实现在客户端发送client hello

提前致谢。

解决方法

搜索go doc后,找到了解决方案,希望对后来遇到类似问题的人有用。

tls中,有一个函数client,可以从现有网络构建。康恩,然后使用 握手

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

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
分享如何统信UOS系统在屏蔽mysql显性的用户名称以及密码  617
分享免费开源高速下载器  579
分享如何在银河麒麟高级服务器操作系统V10SP3中需要启用内核审计功能。  573
通过shell脚本在统信UOS/麒麟系统中安装nginx  505
分享如何查看网卡中断的数量  423
分享查询网卡所在PCI插槽链路能力及当前链路状态  420
麒麟系统资源下载合集(适配各类cpu)  417
麒麟系统进行内存清理  414
统信UOS常见问题小总结  412
winrar绿色无广告版分享  394
最近下载排行榜
分享如何统信UOS系统在屏蔽mysql显性的用户名称以及密码 0
分享免费开源高速下载器 0
分享如何在银河麒麟高级服务器操作系统V10SP3中需要启用内核审计功能。 0
通过shell脚本在统信UOS/麒麟系统中安装nginx 0
分享如何查看网卡中断的数量 0
分享查询网卡所在PCI插槽链路能力及当前链路状态 0
麒麟系统资源下载合集(适配各类cpu) 0
麒麟系统进行内存清理 0
统信UOS常见问题小总结 0
winrar绿色无广告版分享 0
作者收入月榜
1

prtyaa 收益395.97元

2

zlj141319 收益228.92元

3

IT-feng 收益215.07元

4

1843880570 收益214.2元

5

风晓 收益208.24元

6

777 收益173.02元

7

哆啦漫漫喵 收益131.8元

8

Fhawking 收益106.6元

9

信创来了 收益105.97元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

加入交流群

请使用微信扫一扫!