三种解密 HTTPS 流量的方法介绍

news2024/11/19 1:20:20

Web 安全是一项系统工程,任何细微疏忽都可能导致整个安全堡垒土崩瓦解。拿 HTTPS 来说,它的「内容加密、数据完整性、身份认证」三大安全保证,也会受到非法根证书、服务端配置错误、SSL 库漏洞、私钥被盗等等风险的影响。很多同学认为只要访问的网站地址前有一把小绿锁就绝对安全,其实不然。本文通过介绍三种最常规的 HTTPS 流量解密方法及原理,浅谈一下 HTTPS 的安全风险。

Man-in-the-middle

Man-in-the-middle(中间人,简称为 MITM),能够与网络通讯两端分别创建连接,交换其收到的数据,使得通讯两端都认为自己直接与对方对话,事实上整个会话都被中间人所控制。简而言之,在真正的服务端看来,中间人是客户端;而真正的客户端会认为中间人是服务端。

实现中间人攻击有各种各样的手段,这里不展开讨论。一些常见的 HTTP/HTTPS 抓包调试工具,都是通过创建本地 Proxy 服务,再修改浏览器 Proxy 设置来达到拦截流量的目的,他们的工作原理与中间人攻击一致。我用过的这一类工具有:Fiddler、Charles 和 whistle。我在「HTTP 代理原理及实现(一)」一文中介绍的 HTTP 普通代理,扮演的就是 HTTP 中间人角色。

本文主要讨论 HTTPS 中间人,简单示意如下:

Server <---> Local Proxy <---> Browser
         ^                 ^
       HTTPS(1)          HTTPS(2)

上述 HTTPS(1) 连接,是中间人冒充客户端,与服务端建立的连接,由于 HTTPS 服务端一般不认证客户端身份,这一步通常没有问题。而对于 HTTPS(2) 连接来说,中间人想要冒充服务端,必须拥有对应域名的证书私钥,而攻击者要拿到私钥,只能通过这些手段:1)去网站服务器上拿;2)从 CA 处签发证书;3)自己签发证书。

要防范前两点,需要网站做好各个方面的安全防护,从主机安全到网站安全(避免私钥被盗),从域名解析安全到域名邮箱安全(避免攻击者重签证书)。而攻击者自己签发的证书,无法通过系统内置根证书的验证,默认无法用于中间人攻击。

对于 Fiddler 这一类调试工具来说,能够解密 HTTPS 流量的关键在于他们会往系统受信任的根证书列表导入自己的证书,这样他们的自签证书就能被浏览器信任。进入 Fiddler 设置中的「HTTPS」Tab,勾选相关功能后,就可以顺利解密和修改 HTTPS 流量。这时在浏览器中可以看到这样的证书链:

fiddler root

RSA Private Key

我在「使用 Wireshark 调试 HTTP/2 流量」这篇文章中写到:Wireshark 的抓包原理是直接读取并分析网卡数据,要想让它解密 HTTPS 流量,有两个办法:1)如果你拥有 HTTPS 网站的加密私钥,可以用来解密这个网站的加密流量;2)某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中,可供 Wireshark 加密使用。那篇文章介绍了第二种方案,本文简单介绍第一种。

打开 Wireshark 的 SSL 协议设置,参考下图,把 IP、端口、协议和证书私钥都配上(私钥必须存为 PEM 格式):

wireshark ssl config

然后访问私钥对应的网站,可以看到流量已被解密:

decrypt http1 over tls

可以看到截图中的 HTTP/1 加密数据已被还原为明文。那么这种方式能解密 HTTP/2 流量吗?先说结论:不能!具体原因下面慢慢分析。

我们知道,TLS 握手阶段需要进行密钥交换和服务端认证这两个重要的操作,密钥交换是为了在不安全数据通道中产生一个只有通信双方知道的共享密钥 Premaster Secret,进而生成 Master Secret 以及后续对称加密 Session Key 和 MAC Key。而客户端之所以要进行服务端认证,是为了确保连接到拥有网站私钥的合法服务器。

最常见的密钥交换方式是 RSA,下面这张图清晰的描述了这个过程:

ssl handshake rsa

图片来源

Client Random 和 Server Random 明文传输,中间人可以直接查看。客户端生成 Premaster Secret 后,用服务端证书公钥加密后发送,如果服务端拥有对应的私钥,就可以成功解密得到 Premaster Secret。这时,客户端和服务端拥有相同的 Client Random、Server Random 和 Premaster Secret,可以各自算出相同的后续所需 Key。

可以看到,这种方式合并了密钥交换和服务端认证两个步骤,如果服务端能解出 Premaster Secret,也就意味着服务端拥有正确的私钥。中间人没有私钥,无法得到 Premaster Secret,也就无法解密后续流量。

对于 Wireshark 来说,配置某个网站的私钥后,能解密这个网站「使用 RSA 进行密钥交换」的加密流量就很容易理解了。

显然,RSA 密钥交换有一个很大的问题:没有前向安全性(Forward Secrecy)。这意味着攻击者可以把监听到的加密流量先存起来,后续一旦拿到了私钥,之前所有流量都可以成功解密。

实际上,目前大部分 HTTPS 流量用的都是 ECDHE 密钥交换。ECDHE 是使用椭圆曲线(ECC)的 DH(Diffie-Hellman)算法。下图是 DH 密钥交换过程:

ssl handshake diffie hellman

上图中的 Server DH Parameter 是用证书私钥签名的,客户端使用证书公钥就可以验证服务端合法性。相比 RSA 密钥交换,DH 由传递 Premaster Scret 变成了传递 DH 算法所需的 Parameter,然后双方各自算出 Premaster Secret。

对于这种情况,由于 Premaster Secret 无需交换,中间人就算有私钥也无法获得 Premaster Secret 和 Master Secret。也就是说 Wireshark 无法通过配置 RSA Private Key 的方式解密「使用 ECDHE 进行密钥交换」的加密流量。当然,使用 ECDHE 后,如果被中间人拿到私钥,尽管无法用于解密之前流量,但他可以实施 MITM 攻击来解密之后的流量,所以私钥还是要保管好。

在 ECDHE 密钥交换中,签名算法可以使用 RSA 或 ECDSA(取决于证书类型),也就是目前密钥交换 + 签名有三种主流选择:

  • RSA 密钥交换(无需数字签名);
  • ECDHE 密钥交换、RSA 数字签名;
  • ECDHE 密钥交换、ECDSA 数字签名;

以下是使用这三种密钥交换方式的网站在 Chrome 中的截图:

key exchange

HTTP/2 中只能使用 TLSv1.2+,还禁用了几百种 CipherSuite(详见:TLS 1.2 Cipher Suite Black List)。实际上,HTTP/2 允许使用的 CipherSuite 必须采用具有前向安全性的密钥交换算法,不允许使用 RSA 密钥交换。这也是为什么 RSA Private Key 无法用于解密 HTTP/2 加密流量。

SSLKEYLOGFILE

Firefox 和 Chrome 都会在系统环境变量存在 SSLKEYLOGFILE 文件路径时,将每个 HTTPS 连接产生的 Premaster Secret 或 Master Secret 存下来。有了这个文件,Wireshark 就可以轻松解密 HTTPS 流量,即使是使用了 ECDHE 这种具有前向安全性的密钥交换。如下图:

decrypt http2 over tls

这种方案的详细介绍请参考「使用 Wireshark 调试 HTTP/2 流量」这篇文章。

SSLKEYLOGFILE 文件记录的是 HTTPS 数据传输中最重要的加密信息,如果不是出于调试目的,一般也没人会主动配置这个环境变量,所以这个方案基本不会对 HTTPS 安全性产生影响。

总结

Fiddler 这类工具通过往系统导入根证书来实现 HTTPS 流量解密,充当中间人角色。要防范真正的 HTTPS 中间人攻击,网站方需要保管好自己的证书私钥和域名认证信息,为了防范不良 CA 非法向第三方签发自己的网站证书,还要尽可能启用 Certificate Transparency、HTTP Public Key Pinning 等策略;用户方不要随便信任来历不明的证书,更不要随意导入证书到根证书列表,还要养成经常检查常用网站证书链的习惯。

RSA 密钥交换没有前向安全性,这意味着一旦私钥泄漏,之前所有加密流量都可以解开。为此,网站方需要启用使用 ECDHE 作为密钥交换的 CipherSuite,或者直接使用 ECC 证书;用户方需要弃用不支持 ECDHE 的古董操作系统及浏览器。

对于浏览器而言,HTTPS 毫无秘密,通过浏览器生成的 SSLKEYLOGFILE 文件,Wireshark 可以轻松解密 HTTPS 流量。另外,如果浏览器被安装恶意扩展,即使访问安全的 HTTPS 网站,提交的数据一样可以被截获。这种客户端被攻击者控制引发的安全问题,无法通过 HTTPS 来解决。

原文链接:三种解密 HTTPS 流量的方法介绍 | JerryQu 的小站

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

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

相关文章

Unity之摄像机

一、摄像机类型 1.1 透视摄像机 透视摄像机有近大远小的效果&#xff0c;与我们在现实中看到的效果相同。所以当两个同样大小的物体到摄像机的距离不同时我们看到的大小也会不同。Unity的3D项目中默认使用的就是透视摄像机。 1.2 正交摄像机 正交摄像机没有近大远小的效果&am…

Python 微服务架构指南

概要 微服务架构作为一种设计风格&#xff0c;它将应用程序构建为一套小服务的集合&#xff0c;每个服务实现特定的业务功能&#xff0c;这些服务可以独立部署、扩展并围绕特定业务能力构建。Python 凭借其简洁易读的语法和强大的库生态系统成为实现微服务的受欢迎选择。本文将…

can/CANFD数据记录仪——冬标神器

冬测案例 新能源电池在冬标中要测试电池的电性能&#xff0c;热管理&#xff0c;充电&#xff0c;SOC的性能电动车的关键组之一是动力电池&#xff0c;动力电池的表现&#xff0c;除了依赖自身的材料&#xff0c;工艺等硬件素质外&#xff0c;还依赖电池管理系统的表现&#xf…

专业能力再获赞!棱镜七彩收到中国软件评测中心感谢信

近日&#xff0c;中国软件评测中心&#xff08;工业和信息化部软件与集成电路促进中心&#xff09;发来感谢信&#xff0c;对棱镜七彩在助力信创产业发展过程中所做出的贡献表示感谢&#xff0c;并对棱镜七彩工作人员专业细致、尽职尽责的工作态度和敬业精神进行了高度赞扬。同…

智能座舱的下一个价值“爆点”——让“光”更智能

汽车智能化快速升级&#xff0c;智能座舱作为人机交互的主要窗口&#xff0c;交互模态、用户体验也呈现多维度升级。 例如&#xff0c;今年下半年上市的多款高端智能车型纷纷基于高性能座舱硬件平台&#xff0c;集成了AR-HUD、DMS/OMS等高阶功能&#xff0c;同时结合超大屏/多…

电脑记事本怎么打开?电脑记事本打开方法

在日常工作中&#xff0c;许多上班族都习惯于使用电脑记事本记录重要事项、灵感想法或临时任务。电脑记事本轻便、简洁&#xff0c;能够为我们提供便捷的记事体验。那么电脑记事本怎么打开呢&#xff1f;电脑记事本打开方法是什么呢&#xff1f;在Windows电脑上&#xff0c;我们…

VMware linux虚拟机卸载不干净导致二次安装之后虚拟机ping不通主机

问题就是主机能ping通虚拟机&#xff0c;虚拟机不能ping通主机&#xff0c;我看网上又说虚拟机和主机没在同一网段的&#xff0c; 有些确实是这个情况但是首先你要打开控制面板–》网络–》网络和共享中心-》更改适配器设置&#xff0c;然后 会弹出下面的界面 如果你的没有上面…

Spring Data JPA入门到放弃

参考文档&#xff1a;SpringData JPA&#xff1a;一文带你搞懂 - 知乎 (zhihu.com) 一、 前言 1.1 概述 Java持久化技术是Java开发中的重要组成部分&#xff0c;它主要用于将对象数据持久化到数据库中&#xff0c;以及从数据库中查询和恢复对象数据。在Java持久化技术领域&a…

Django和Vue项目运行过程中遇到的问题及解决办法

这是我从CSDN上边买来的一个系统的资源&#xff0c;准备在此基础上改成自己的系统&#xff0c;但是在运行项目这一步上都把自己难为了好几天&#xff0c;经过不断的摸索&#xff0c;终于完成了第一步&#xff01;&#xff01;&#xff01; 如果大家也遇到同样的问题&#xff0…

聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化

聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化 目录 聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化&#xff08;完整源码和数据) 2.多特征输入&…

数据结构学习 jz60 n个骰子的点数

关键词&#xff1a;动态规划 滚动数组优化 这道题还是不难的&#xff0c;就是特别纠结要怎么优化这个存储空间以及动态规划的方法&#xff0c;因为我觉得这个方法好原始&#xff0c;最后决定不优化了。最后发现题解也是这个原始的样子&#xff0c;我就放心了。用时38min。 题…

T527 Android 13 编译步骤

步骤1&#xff1a; cd longan./build.sh config (0 2 1) 选择 Android 平台&#xff1a; 步骤2&#xff1a;选择IC为t527&#xff1a; 步骤3&#xff1a;板子类型选为demo_car&#xff1a; 步骤4&#xff1a;选择 flash&#xff0c;默认选择 default 则可&#xff1a; 步骤5&…

Linux系统安装DockerDocker-Compose

1、Docker安装 下载Docker依赖的组件 yum -y install yum-utils device-mapper-persistent-data lvm2 设置下载Docker服务的镜像源&#xff0c;设置为阿里云 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装Docker服务 …

JS 手写 new 函数

工作中我们经常会用到 new 关键字&#xff0c;new 一个构造函数生成一个实例对象&#xff0c;那么new的过程中发生了什么呢&#xff0c;我们今天梳理下 创建一个对象对象原型继承绑定函数this返回对象 先创建一个构造函数&#xff0c;原型上添加一个方法 let Foo function (n…

kafka消息队列安装以及整合springboot使用

文章目录 一、JMS与AMQP二、安装2.1 Java安装2.2 Zookeeper 和 kafka安装2.3 docker-compose 安装【待定&#xff0c;远程连接可能连接不上】 三、Kafka数据存储流程和原理概述和LEOHW讲解四、代码客户端连接kafka五、**ProducerRecord和key的作用**5.1 **如果保证顺序消费&…

2024年【烟花爆竹生产单位安全生产管理人员】考试及烟花爆竹生产单位安全生产管理人员模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 烟花爆竹生产单位安全生产管理人员考试参考答案及烟花爆竹生产单位安全生产管理人员考试试题解析是安全生产模拟考试一点通题库老师及烟花爆竹生产单位安全生产管理人员操作证已考过的学员汇总&#xff0c;相对有效帮…

Html5实用个人博客留言板模板源码

文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的日记界面1.4 我的文章列表界面和文章内容界面1.5 我的留言板界面 2.演示效果和结构及源码2.1 效果演示2.2 目录结构2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151…

Socket与TCP的关系

前言 相信大家对于TCP已经非常熟悉了&#xff0c;学习过计算机网络的同学对于它的连接和断开流程应该已经烂熟于心了吧。 那么Socket是什么&#xff1f; Socket是应用层与TCP/IP协议簇通信的中间软件抽象层&#xff0c;它是一组接口。在设计模式中&#xff0c;Socket其实就是…

Softing LinkXpert M3荣获Connect Professional“2023年度产品”

2023年7月21日&#xff0c;Softing IT Networks凭借其LinkXpert M3产品荣获2023年度Connect Professional读者选择的“2023年度产品”奖项。 在信息及通信技术测量类别中&#xff0c;LinkXpert M3从众多竞争者中脱颖而出&#xff0c;最终获得提名并跻身“2023年度产品”之列。该…

Gin 路由注册与请求参数获取

Gin 路由注册与请求参数获取 文章目录 Gin 路由注册与请求参数获取一、Web应用开发的两种模式1.前后端不分离模式2.前后端分离模式 二、RESTful介绍三、API接口3.1 RESTful API设计指南3.2 API与用户的通信协议3.3 RestFul API接口设计规范3.3.1 api接口3.3.2 接口文档&#xf…