HTTPS 协议与监听方法

现在越来越多的网站开始使用 HTTPS,为了分析网站,有时就需要使用监听工具来记录网站的 HTTPS 请求。
最常用的工具当然是 Chrome DevTools,可有的时候我们需要分析非 Web 应用的请求,这时就只能用其他的方法了。

对于明文的 HTTP 协议,我们可以直接使用网络嗅探工具 Wireshark 进行抓包分析。

可现在大家基本都开始拥有了一定的安全意识,HTTPS 已经成为主流,甚至连内网大家也要搞零信任安全架构
这种情况下,我们就只能使用网络代理工具,以中间人的身份进行请求分析了。

主流的监听工具

  1. mitmproxy
  2. Charles
  3. fiddler

浏览器与服务器是如何协商使不使用 TLS/SSL,还有用哪个版本的 HTTP 的?

1. 用不用 HTTPS?

如果你用 HTTP 上知乎,它会返回一个 301,重定向到 HTTPS.
之后浏览器就会记住这个网页支持 HTTPS,在不给出协议 scheme 的情况下(在输入框只输入 zhihu.com),优先使用 HTTPS 访问。

在 HTTPS 协议中,先建立 TCP 连接,然后在建立 TLS/SSL 连接前,会有一个加密方法协商,在其中浏览器和服务器协商具体的加密协议版本。

2. 用哪个版本的 HTTP?

在 HTTPS 通信中,之前说过连接建立前会有一个加密方法协商的步骤。为了支持 HTTP/2,在该协商步骤中加入了 ALPN(Application Layer Protocol Negotiation,应用层协议协商)的拓展。

客户端在建立 TLS/SSL 连接的 Client Hello 握手中,会通过 ALPN 拓展列出自己支持的各种应用层协议。然后服务端可以按需从中选择,并在 Server Hello 中指定具体要使用的协议。

而在 HTTP 通信或者不支持 ALPN 的 HTTPS 通信中,可以通过 Connection: Upgrade 方式从 HTTP/1.x 升级到 HTTP/2.在 HTTP Upgrade 机制中,HTTP/2 的协议名称是 h2c:

GET / HTTP/1.1
Host: example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

如果服务端不支持 HTTP/2,它会直接返回 HTTP/1 的响应。否则就返回 101 switching.

HTTP/1.0

就服务器而言,即使它收到的是 HTTP/1.0 的请求,也会返回 HTTP/1.1 的响应。这也算是一种协商机制:服务器通过 HTTP/1.1 的响应通知客户端,我是支持 HTTP/1.1 的。

因为 HTTP/1.0 和 HTTP/1.1 都是文本格式的协议,是兼容的,因此可以这样返回。但是 HTTP/2 是二进制协议,不兼容,就必须通过 ALPN 或 Upgrade 协商。

参考

原文地址:https://www.cnblogs.com/kirito-c/p/10360349.html

时间: 2024-10-03 15:48:25

HTTPS 协议与监听方法的相关文章

简述Java中Http/Https请求监听方法

一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采用Fiddler2作为分析工具,Fiddler很强大,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,是越墙抓包之利器.关于工具的介绍可以参考下面的链接: http://www.cnblogs.com/TankXiao/archive/2012/02

Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法

时隔一个多月我又回来啦! 坚持真的是很难的一件事,其它事情稍忙,就很容易说服自己把写博客的计划给推迟了. 好在终于克服了自己的惰性,今天又开始了. 本篇继续我的Luaframework学习之路. 一.规范开发模式 此前的示例中,动态加载的panel都默认以GuiCamera为父节点,且面板的大小设置得有些随意,为方便后续开发,现做一些调整和规范. 1.设定本项目的开发分辨率为1334x750(Game视图分辨率也设置为这个大小): 2.调整相机,将原有的GuiCamera从Canvas下拖离出来

EditText监听方法,实时的判断输入多少字符

最近在写一个小项目,其中有一点用到了显示EditText中输入了多少个字符,像微博中显示剩余多少字符的功能.在EditText提供了一个方法addTextChangedListener实现对输入文本的监控.下边是我自己写的一个Demo. 代码实现: 布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.

代码添加一个按钮及监听方法

有时候无法从控件中拖拽一个按钮到storyboard,必须用编写代码方式添加按钮: 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view, typically from a nib. 5 //计算出展示表情区域的宽和 展示区距顶部的高度+10个偏移量 6 //添加按钮 9 //创建button 10 addBtn = [[UIButton alloc

OnClickListener两种监听方法

1 //1种:接口OnClickListener ,在onclick响应 2 public class MainActivity extends Activity implements OnClickListener { //这个类前提要接口OnClickListener 3 4 private Button receive; //按钮的初始化 5 private Button falsewifiButton; 6 7 public void init(){ 8 receive=(Button)

Android之如何给ListView添加监听方法

第一步创建ListView //根据id获取对象 ListView listView = (ListView) findViewById(R.id.listview1); //创建适配器对 //参数代表的意思(上下文对象,每行样式类型(必须是TextView类型 android.R.....是系统自带的样式,也可以使用自己定义的),数据本身(可以来自资源数据,也可以来自数组在java中添加)) //以下方式(数据来自资源文件的数组) ListAdapter adapter = ArrayAdap

tomcat 服务器的几个重要监听 方法 与 使用

1. 总结一下tomcat 服务器里的三种监听 ServletContextListener HttpSessionListener ServletRequestListener 这是我要做的三个自定义重写 类 分别继承上面三个接口 2具体源码 (1) ServletContextListener 用于监听服务器的启动与关闭 1 package cn.cen2guo.clinic.listener; 2 3 4 import javax.servlet.ServletContextEvent;

Unity3d 中键值监听方法

unity3d的api中没有负责监听键值的方法,不过unity的input类是通过c#类获取各类监听事件,所以我们可以通过c#类监听,方法如下: void OnGUI() { Event e = Event.current; if (e.isKey) { if (Event.current.keyCode == KeyCode.Joystick2Button0){ //你的逻辑} } } 过程很简单,就不多说,注意该事件只能在OnGUI函数中起作用. 转载请标明出处,from 博客园 HemJo

javascript 兼容W3c和IE的添加(取消)事件监听方法

事件作为javascript本身的一个必备功能,在目前javascript的使用中是无处不在的,基本要只要写到javascrpt,就会用到javascript事件.下面就说说javascript中的添加事件监听和取消事件监听的方法,当然也要做到兼容W3c和IE.下面是兼容的代码: [javascript] view plain copy //添加事件监听兼容函数 function addHandler(target, eventType, handler){ if(target.addEvent