zoukankan      html  css  js  c++  java
  • [https][tls] 如何使用wireshark查看tls/https加密消息--使用keylog

    姊妹篇: 

    [ipsec][strongswan] 使用wireshark查看strongswan ipsec esp ikev1 ikev2的加密内容

    [https][tls] 如何使用wireshark查看tls/https加密消息--使用私钥

    需求

    学习SSL/TLS的过程中, 使用wireshark转包分析,是常用的手段.

    我自建nginx自签名证书, 抓了一个访问请求的包, 是这样的.

     我们可以看到, 从第8个包开始, 便出现了密文. 即使我不关心TLS上层的业务内容, 第八和第九个包里边的最后两段加密数据段, 也是需要关心的. 他们是Finshed报文,是协商报文的一部分.

    配置

    wirshark

    我们知道wireshark具体解密TLS密文的能力. (我们当然知道, 因为我们经验丰富), 而且我们还知道从下边的这个地方进行配置:

    edit->preferences->protocols->tls

    情况A: 当我们使用RSA进行秘钥交互的时候, 就对RSA keys list项进行配置, 导入server端的私钥.

    情况B:  当我们使用DH进行秘钥交互的时候, 就对Master Secret log filename进行配置, 导入单次会话的主密钥.  因为DH的秘钥交互过程是明文交互的, 所以只配这个,也能解开全部的密文.

    curl或firefox

    情况A并没有这个步骤. 下面讨论情况B

    wireshark的配置中需要的配置文件, 是用来保存主秘钥的. 称为 SSLKEYLOGFILE

    在通过curl或firefox访问之前, 设置环境变量SSLKEYLOGFILE的值为目标文件, 在执行过curl或firefox之后, 主密钥会被自动记录到该文件中, 如下以curl为例, firefox同样适用:

    ┬─[tong@T7:~/Works/tls]─[08:22:58 PM]
    ╰─>$ export |grep SSL
    SSLKEYLOGFILE /home/tong/Works/tls/keylog
    ┬─[tong@T7:~/Works/tls]─[08:23:59 PM]
    ╰─>$ curl --cacert ~/Keys/https/root/root.cer https://TTTrust:443/

    可以看到该文件的内容:

    ┬─[tong@T7:~/Works/tls]─[08:24:02 PM]
    ╰─>$ cat keylog 
    CLIENT_RANDOM db23bf9a63b494ba72ecfaef831f55954f887576xxxxa2c45e46e7f631ea160d bfc5346bb7c0573b95e637a973524884ec912b67d5ce747c1a169e1d6ba57643ff8a1e97b33b11c5d6ff249961efxxxx

    效果

    现在, 按前文配置该文件在wireshark中, 可以看见下面的效果:

    协商包与数据包都被解开了.

    参考

    <<everything curl>>是curl主页上推荐的官方书面, 其中一个章节讲述了以上方法

    https://ec.haxx.se/tls-sslkeylogfile.html

  • 相关阅读:
    gcvt(),ecvt(),fcvt()的区别
    SQLITE3 使用总结
    C++的类型转换浅析
    JAVA Class21
    JAVA Class20
    JAVA Class19
    JAVA Class18
    JAVA Class17
    JAVA Class16
    关于hover失效问题(!important)
  • 原文地址:https://www.cnblogs.com/hugetong/p/11437091.html
Copyright © 2011-2022 走看看