Http/https代理和抓包分析

news2024/11/27 23:36:13

前言

最近工作需要部署http/https的代理,所以用squid部署了一下,重新回顾了一下http和https的代理知识。

HTTP代理

根据《HTTP 权威指南》如图:

这种情况下,对访问服务器而言,它会把代理当做客户端,完全察觉不到真正客户端的存在,完全隐藏了客户端的IP,当然代理也可以修改Http头部,X-Forwarded-IP头部告诉服务器真正的客户端IP。

代理可以用两种方式,一种是代码实现,一种用现成的代理软件如squid,本文是用squid,配置文件如下(这里不详细介绍squid的使用,有需要单独另开来讲squid)。然后启动squid起来

代码实现

var http = require('http');
var net = require('net');
var url = require('url');

function request(cReq, cRes) {
    var u = url.parse(cReq.url);

    var options = {
        hostname : u.hostname, 
        port     : u.port || 80,
        path     : u.path,       
        method     : cReq.method,
        headers     : cReq.headers
    };

    var pReq = http.request(options, function(pRes) {
        cRes.writeHead(pRes.statusCode, pRes.headers);
        pRes.pipe(cRes);
    }).on('error', function(e) {
        cRes.end();
    });

    cReq.pipe(pReq);
}

http.createServer().on('request', request).listen(3128, '0.0.0.0');

squid配置

# Squid normally listens to port 3128
http_port 3128

然后客户端使用curl命令通过代理访问百度(注意这里访问百度用的http协议而非https) 

curl -x http://43.129.198.37:3128 http://www.baidu.com

可以看到这时候访问成功了, 分析报文(报文分别是在客户端和服务端这边抓取的)由于是http,所以报文都是明文发送的,分别可以看到客户端和代理TCP的三次握手,代理和服务器TCP三次握手,以及http报文。

但是上述的过程能不能代理https的流量呢,答案是代码形式的不行,squid的可以,这就涉及到第二个内容http的隧道代理

HTTP隧道代理-代理https流量

也就是上述squid配置不变,把命令改成:

curl -x http://43.129.198.37:3128 https://www.baidu.com 把百度协议改成https它依然能够成功,因为squid是有http的隧道代理的。

还是抄《HTTP 权威指南》图,首先客户端会发送connect请求将需要访问域名发送给proxy,proxy会回应http connect established就绪报文,并且proxy和server建立了TCP通道,后续proxy会进行盲转发client和server之间报文

客户端到proxy之间报文:

 proxy和server之间的报文:

 

直接上报文讲解,可以 看到在客户端和proxy之间发送connect请求,然后proxy回了connection established,后续就是TLS的通信过程。proxy和server会创建一个TCP通道,然后后续client发送给server的TLS通信过程,proxy只是进行盲转发,如何验证这点?请看如图:

把TLS第一个Client hello报文拿出来分别对比,可以看到客户端到proxy,proxy到server的client hello的随机值Random都是一样的,证明proxy只是进行盲转发。

https代理

很多时候在讨论代理,因为发现很多人都混淆了https代理和代理https流量。如上面http隧道代理,它能支持客户端访问服务器,也就是说它能代理https流量,但它是http代理,因为站在客户端角度,它配置的就是http代理,如上述curl命令就是客户端:

-x http://43.129.198.37:3128,填的协议就是http

再比如switchyOmega配置也是配置http,因为本质上客户端和proxy之间是http connect明文交互的。

所以https代理本质上指的就是,客户端和proxy之间交互是加密的,也就是上述的http connect是加密的,客户端配置的代理协议是https。

squid配置文件修改:

https_port 443 cert=./myCA.pem

 那么curl命令就变为:

SSLKEYLOGFILE=./ssl-key.log curl -x https://43.129.198.37:443 https://www.baidu.com --proxy-cacert ./test2.pem

其中myCA.pem里面包含公私钥,curl命令的test.pem只包含公钥,这里加上了一个环境变量SSLKEYLOGFILE是用于wireshark进行解密的。

还是一样抓取client-proxy的流量,以及proxy到server的流量

 第一份报文是解密后的数据,可以看到客户端和proxy之间先进行了TLSv1.3协商,协商完成后,加密了http connect数据,以及返回connection established

 第二份报文是proxy和服务器的协商是TLSv1.2进行协商的,但是其实这时候proxy依然只是和server进行tcp连接进行盲转发,还是客户端和服务器的tls协商,也就是说客户端和proxy先进行TLSv1.3协商,然后客户端再和服务器再进行TLS1.2协商,这中间TLSv1.3 加密了客户端与服务器的TLSv1.2协商过程。

要验证也很简单跟上述一样找client hello报文的随机数:

Squid-SSL-Bump模式

这种模式下,proxy是一种中间人的角色Man-in-middle,能够对客户端到服务器的加密信息进行解密。

squid的配置

http_port 3128 ssl-bump \
  cert=/etc/squid/ssl_cert/myCA.pem \
  generate-host-certificates=on dynamic_cert_mem_cache_size=4MB

# For squid 3.5.x
sslcrtd_program /usr/local/squid/libexec/ssl_crtd -s /var/lib/ssl_db -M 4MB

# For squid 4.x
# sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /var/lib/ssl_db -M 4MB

acl step1 at_step SslBump1

ssl_bump peek step1
ssl_bump bump all

未完待续

参考文献:

Intercept HTTPS CONNECT messages with SSL-Bump | Squid Web Cache wiki (squid-cache.org)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++算法:前缀和基础

相关 源码测试用例下载 https://download.csdn.net/download/he_zhidan/88430716 包括4个压缩包,初始代码,实现前缀和,实现前缀积,实现前缀异或。都是在前者的基础上修改的。 本博文是CSDN学院课程的讲义 https://edu.csdn.net/c…

【linux kernel】linux的platform设备驱动框架分析

文章目录 一、简介二、platform总线三、platform设备和驱动的匹配过程四、platrom驱动和platform设备五、platform驱动设计六、代码示例 🔺【linux内核系列文章】 👉对一些文章内容进行了勘误,本系列文章长期不定时更新,希望能分享…

可视化上证50结构图

可视化上证50结构图 缘由收集数据先获取50支成分股列表获取各成分股票K线数据 数据处理找出来,再删除,然后重新下载数据最终获得每日报价的变化值 图形结构处理聚类分析使用affinity_propagation(亲和传播)聚类 嵌入二维平面空间可视化小结热力图 缘由 …

Excel和图片如何互相转换?有何技巧?

一、将图片转为excel表格 首先,打开金鸣识别网站,点击“点击添加需转换的图片或PDF”按钮,添加待识别的图片或PDF文件。 添加完待识别的图片或PDF后,点击“提交识别”按钮,程序便开始识别。 识别完成后,系…

无效的 page.json [“window“] 页面.json配置了“window“: {“disableScroll“: true}

问题:启动小程序时报错 无效的 page.json ["window"] 页面 解决: app.json 全局配置才使用window对象,在单独的页面直接写disableScroll:true即可 //app.json中添加,window里面添加就可以了 "window": { …

儿童写作业用的护眼灯哪种好?双十一写作业护眼灯推荐

这些年大家对于身体健康越来越重视,尤其是关于儿童青少年的眼睛健康问题,因此作为学生们常用的护眼台灯也成为了非常多家长为孩子选择的学习台灯。而还没给孩子准备台灯的家长们也都想买上一盏台灯给孩子使用,但市面上的护眼台灯太多了&#…

【ElasticSearch】学习笔记

【ElasticSearch】学习笔记 【一】ElasticSearch是什么?【二】Mac安装ElasticSearch【三】Mac安装可视化界面Kibana 【一】ElasticSearch是什么? ElasticSearch是一个分布式、Restful风格的搜索和数据分析引擎,Stark的核心。 可以应用在比如…

XnViewMP forMac/Windows中文版:轻松管理和浏览您的图片库

您是否厌倦了使用不方便、功能有限的图片浏览软件?现在,让我向您介绍一款强大而全面的图片浏览软件——XnViewMP! XnViewMP是一款免费开源的跨平台图片浏览软件,它具有出色的功能和易用性,适用于个人用户和专业摄影师…

助力森林火情预警检测,基于YOLOv7-tiny、YOLOv7和YOLOv7x开发构建无人机航拍场景下的森林火情检测是别预警系统

火情的预警与检测识别对于保障林业安全,减少人员伤亡有着重要的意义,科学有效地早发现早扑灭是最有效的干预手段,本文的主要是想就是想要建立基于无人机航拍场景下的森林火情检测预警系统,整体效果如下所示: 这里文中选…

TikTok整合谷歌搜索功能,探索新的流量入口

随着社交媒体平台的不断崛起和发展,用户们的需求也在不断演变。如今,人们不仅仅是在社交媒体上分享自己的生活点滴,还希望从中获取更多有用的信息。 因此,社交媒体平台正积极寻找与搜索引擎的整合方式,以满足用户的多…

小程序开发平台源码系统+万能门店小程序功能+完整的搭建教程

大家好啊,今天来给大家分享一个小程序开发平台,这款平台源码系统中包含了万能门店小程序功能,一起来看看吧。 系统特色功能一览: 全端覆盖:独立版万能门店全端云小程序可以一键生成全端小程序,包括微信小程…

2023_Spark_实验十三:Spark RDD 求员工工资总额

一、主题:Spark RDD 求员工工资总额及排名 问题提出:近三年来,全球新冠疫情已经严重影响了现有经济情况,公司高层领导对公司运行情况进行深入了解,需要了解每个部门的人力成本,以至于更加合理的优化人力资…

从头开始机器学习:神经网络

一、说明 如果你还没有做过逻辑回归,你会在这里挣扎。我强烈建议在开始之前查看它。您在逻辑回归方面的能力将影响您学习神经网络的难易程度和速度。 二、神经网络简介 神经网络是一个神经元网络。这些神经元是逻辑回归函数,它们被链接在一起形成一个网络…

vim基础命令批量替换

正常模式 v(小写)正常模式下面会出现VISUAL,可以可以选择指定连续区域可以随意选择,这个用的最多 ctrl v(小写) 这个可以类似于sublime这种按照固定前几个字符选择 最后一列哪个a其实已经选择了&#xf…

论文导读 | 八月下旬特征选择专题期刊精选

推文作者:丰于杭 编者按 在“八月下旬特征选择专题期刊精选”中,我们有主题、有针对性地选择了MSOM, Operations Research, Management Science等管理科学杂志中一些有趣的文章,不仅对文章的内容进行了概括与点评,而且也对文章的结…

c++视觉处理----图像模板匹配

模板匹配matchTemplate() matchTemplate() 是OpenCV中用于模板匹配的函数之一。它的主要作用是在一幅图像中搜索模板图像的位置,即找到模板在图像中的匹配位置。 函数原型如下: void cv::matchTemplate(InputArray image,InputArray templ,OutputArra…

生物信息学研究方向

一、生信的两个大类研究方向: 目录 一、生信的两个大类研究方向: 前者偏理论,后者偏向证明 第一类研究方向: 第二类研究方向: 二、具体的研究方向 1、序列分析 2、计算进化生物学 3、生物多样性的度量 4、蛋…

云原生与服务网格

云原生与服务网格 目录 文章来源 【优点知识】 istio课程大纲: https://youdianzhishi.com/web/course/1047 1、云原生技术范畴解读 什么是云原生 2大架构特征:不可变基础设施,声明式API CNCF 云原生整体视图 provisioning 供应 compli…

摩尔信使MThings数据配置参数详述

摩尔信使MThings支持丰富的数据配置方法,以适配一定程度的非标Modbus场景。 针对标准Modbus数据协议,用户仅需修改少量的配置,如寄存器地址、数量,其他参数默认即可。 同时为了便于用户全面了解配置参数,文中详述了每…