zoukankan      html  css  js  c++  java
  • 【参考】HTTPS流量解密

    # SSL/TLS原理

    Clienthello:发送客户端的功能和首选项给服务器,在连接建立后,当希望重协商、或者响应服务器的重协商请求时会发送。

    • version:客户端支持的最佳协议版本
    • Random:共32字节,28字节随机数,4字节额外信息,受客户端时钟影响(为了避免浏览器指纹采集,现在一般会对4字节时钟做扭曲)
    • Session ID:32字节随机数,用于和服务器重建会话,为空表示新建会话
    • cipher suit:客户端支持的所有密码套件,按优先级排列
    • Compression:客户端支持的压缩算法,默认无压缩
    • Extensions:由任意数量的扩展组成,携带额外数据

    ServerHello:

    • 选择客户端提供的参数反馈客户端
    • 服务器无需支持客户端支持的最佳版本,如果服务器不支持客户端版本,可以提供其他版本以期待客户端可以接受

    Certificate:

    • 用于携带服务器X.509证书链
    • 主证书必须第一个发送,中间证书按照正确的顺序跟在主证书之后
    • 服务器必须保证发送的证书和选择的算法套件一致
    • Certificate消息时可选的

    ServerKeyExchange: 携带密钥交换的额外数据,取决于加密套件
    ServerHelloDone:服务器已将所有预计的握手消息发送完毕
    ClientkeyExchange:携带客户端为密钥交换提供的信息
    ChangeCipherSpec:发送端已取得用以连接参数的足够的信息
    Finish:握手完成,消息内容加密,双方可以交换验证,整个握手完整性所需的数据

    • 算法:verrify_data = PRF(master_secret , finished_label,hash(handshake_message))

      要解密HTTPS流量,需要得到加密密钥,加密密钥由主密钥、客户端随机数、服务器随机数生成。由上述握手过程可知,客户端随机数和服务器随机数在双方握手消息中传递,而主密钥(master_secret)则由预主密钥(pre_master_secret)结合两个随机数生成。预主密钥通过密码套件中的密钥交换算法进行交换(DH、RSA)。

      因此,通过Wireshark解密HTTPS,可以从两个地方下手:1、密钥交换算法选择RSA,然后提取服务器的私钥,将私钥导入Wireshark,通过Wireshark解密密钥交换过程中传递的预主密钥,再结合之前的客户端和服务器随机数生成主密钥,进一步生成加密密钥,即可解密后续抓取到的加密报文。2、直接从客户端提取预主密钥,结合客户端和服务器随机数生成加密密钥,实现对加密报文的解密。

    # 利用Wireshark 解密HTTPS流量

    Wireshark 原理是直接读取并分析网卡数据,解密 HTTPS 流量通常有两种方式:

    • 获取HTTPS 网站(服务端)的加密私钥
    • 某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中

     

    ## 一、从服务器上导出带私钥的P12格式的证书,或者直接导出服务器的私钥

    1、获取证书

      使用fiddler的中间人代理技术获取含有私钥的服务器证书:

    1).打开fiddler并启用https代理服务

    2).用配置了fiddler代理的浏览器访问百度

    3).运行”certmgr.msc“打开证书管理器

    4)从Personal/Certificates目录下找到*.baidu.com的证书,右键所有任务-导出

    2.取出证书中的私钥

    使用openssl取出私钥。

    1).将pfx证书转为pem证书

    命令行:openssl pkcs12 -in <pfx证书路径> -nodes -out <输出的pem证书路径(.pem)>

    2).从pem证书中取出私钥

    命令行:openssl rsa -in <pem证书路径> -out <输出的私钥文件路径(.key)>

    3.将私钥配置到wireshark

    3、设置Wireshark

    注:On wireshark 3, moved from SSL protocol to TLS protocol

      由于通过DH方法交换的密钥不会在中间传递,所以这种方法只能解密通过RSA交换的密钥。

    • 【首选项】-【协议】-【TLS】-【RSA keys list】设置RSA秘钥
      • IP address:服务器IP
      • Port:服务器端口
      • Protocol:被加密的上层协议(HTTP)
      • Key file:证书或私钥的存放路径
      • Password:证书加密秘钥
    • 设置过滤器开启抓包

     

    ## 二、设置环境变量截取浏览器的pre_master_secret

    Firefox 和 Chrome 都支持生成上述第二种方式的文件,具体格式见这里:NSS Key Log Format。但 Firefox 和 Chrome 只会在系统环境变量中存在 SSLKEYLOGFILE 路径时才会生成该文件

    1、添加环境变量

    • Windows
      • 打开设置环境变量窗口:systempropertiesadvanced.exe
      • 设置“SSLKEYLOGFILE”和"%USERPROFILE%sslkeysARG.pms"路径
    • Linux/MacOS

    注:使用EXPORT设置环境变量仅适用于该会话。在会话之外启动浏览器或其他Web客户端将不会设置环境变量。

          即如果使用EXPORT设置SSLKEYLOGFILE,则必须从同一会话启动Chrome。同时SSLKEYLOGFILE所指向的路径需要具有写权限的绝对路径。

      • $ export SSLKEYLOGFILE=~/path/to/sslkey.log
      • $ chmod 640 ~/path/to/sslkey.log

    2、设置Wireshark

    注:On wireshark 3, moved from SSL protocol to TLS protocol

    • 【首选项】-【协议】-【TLS】-【(Pre)-Master-Securet log filename】设置“SSLKEYLOGFILE”对应的路径
    • 设置过滤器开启抓包

    3、完全退出Chrome 或者 Firefox程序并重新运行(并指定sslkey logfile)

    • Windows:
      • "C:Program Files (x86)GoogleChromeApplicationchrome.exe" --ssl-key-log-file=%USERPROFILE%sslkeysARG.pms
    • MacOS:
      • /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --ssl-key-log-file=/path/to/sslkey.log

    4、查看Wireshark,可添加过滤:(tcp port 443)

    --------------------------------------------
    Chances are for those who are prepared.
  • 相关阅读:
    EBS SQL > Form & Report
    oracle sql 优化分析点
    MRP 物料需求计划
    MRPII 制造资源计划
    Barcode128 应用实务
    Oracle SQL语句优化技术分析
    APPSQLAP10710 Online accounting could not be created. AP Invoice 无法创建会计分录
    Oracle数据完整性和锁机制
    ORACLE Responsibility Menu Reference to Other User
    EBS 常用 SQL
  • 原文地址:https://www.cnblogs.com/Michael-Scofields/p/13609306.html
Copyright © 2011-2022 走看看