zoukankan      html  css  js  c++  java
  • https wireshark抓包——要解密出原始数据光有ssl 证书还不行,还要有浏览器内的pre-master-secret(内存里)

    基于wireshark抓包的分析

    首先使用wireshark并且打开浏览器,打开百度(百度使用的是HTTPS加密),随意输入关键词浏览。

    我这里将抓到的包进行过滤。过滤规则如下

    ip.addr == 115.239.210.27 && ssl
    • 1

    这里写图片描述

    下面用图来描述一下上面抓包所看到的流程。
    这里写图片描述

    1. Client Hello

    打开抓包的详细,如下。
    这里写图片描述

    不难看出,这一握手过程,客户端以明文形式传输了如下信息:

    1. 版本信息(TLS 1.2)
    2. 随机数
    3. Session ID(用于加快握手过程,可参考TLS会话复用)
    4. 加密套
    5. 压缩算法
    6. 其它一些扩展的(Extension),比如签名算法,服务器名称(本例为sp1.baidu.com);

    Server hello

    这里写图片描述

    这一阶段,服务端返回所选择的协议版本(Version),加密套,压缩算法,随机数,Session ID等;

    from:https://blog.csdn.net/u010536377/article/details/78989931

    数据传输

    经过了 SSL 握手后,服务端的身份认证成功,协商出了加密算法为 AES,密钥为 xxxxx(客户端和服务端拿三个随机值用相同算法计算出来的,并没有明文传输)。一切准备就绪。

    SSL 握手成功,已经可以对接下来的数据加密了,接下来各种应用层协议都可以加密传输。

    Application Data

    应用数据传输消息。因为这里是 HTTPS,所以可以对 HTTP 应用协议数据加密然后传输了。

    Secure Sockets Layer
        TLSv1.2 Record Layer: Application Data Protocol: http
            Content Type: Application Data (23)
            Version: TLS 1.2 (0x0303)
            Length: 1072
            Encrypted Application Data: 6d9b3c9089271630c33506fe28cd6a61fed1f4bd2808f537...
    

    从这里,不知道密钥是无法知道这里传输的是什么数据,连传输的是什么协议的内容都不知道

    所以之前创建 SSL 隧道,让代理服务器盲传 HTTPS 数据,就得通过 CONNECT 方法告诉代理服务器要连哪台主机,哪个端口号,要不然代理服务器也是一脸懵逼。

    所以 SSL 协议是很独立的,这里是对 HTTP 进行了加密,也可以对其他协议进行加密。它就像是 TCP 和应用层协议的中间层,为上层协议提供了加密的数据传输。

    Encryted Alert

    SSL 警告消息,因为是加密的内容,所以单从 Wireshark 看不出警报的内容。

    Secure Sockets Layer
        TLSv1.2 Record Layer: Encrypted Alert
            Content Type: Alert (21)
            Version: TLS 1.2 (0x0303)
            Length: 48
            Alert Message: Encrypted Alert
    

    但因为警报消息经常只是客户端用来提示服务端 SSL 传输结束,对照抓包到的内容确实如此。所以这里只是 SSL 传输结束的一个信号。

    发出了 Encryted Alert 后客户端数据传输完毕,准备进入四次挥手断开 TCP 连接。


    from:https://www.jianshu.com/p/cf8c2f2cd18a

    为什么Wireshark无法解密HTTPS数据

    密钥交换算法

    密钥交换算法目前常用的有RSA和Diffie-Hellman。
    对于密钥交换使用RSA算法,pre-master-secret由客户端生成,并使用公钥加密传输给服务器。
    对于密钥交换使用Diffie-Hellman算法,pre-master-secret则通过在Key Exchange阶段交换的信息,由各自计算出pre-master-secret。所以pre-master-secret没有存到硬盘,也没有在网络上传输,wireshark就无法获取session key,也就无法解密应用数据。那我们是否可以反向计算出pre-master-secret呢?理论上可以,但是非常困难。
    对Diffie-Hellman算法感兴趣的可以参考https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

    解决方法

    说了这么多,究竟有什么办法可以让wireshark解密数据?我们可以通过下面几种方法来使wireshark能解密https数据包。
    1. 中间人攻击;
    2. 设置web服务器使用RSA作为交换密钥算法;
    3. 如果是用chrome,firefox,可以设置导出pre-master-secret log,然后wireshark设置pre-master-secret log路径,这样就可以解密了

  • 相关阅读:
    xls与csv文件的区别
    青音,经典爱情语录
    win7用户账户自动登录方法汇总
    How to using Procedure found Lead Blocker
    FTS(3) BSD 库函数手册 遍历文件夹(二)
    FTS(3) BSD 库函数手册 遍历文件夹(一)
    DisplayMetrics类 获取手机显示屏的基本信息 包括尺寸、密度、字体缩放等信息
    About App Distribution 关于应用发布
    FTS(3) 遍历文件夹实例
    OpenCV 2.1.0 with Visual Studio 2008
  • 原文地址:https://www.cnblogs.com/bonelee/p/9577115.html
Copyright © 2011-2022 走看看