20 | TLS加解密:如何解密HTTPS流量?
该思维导图由 AI 生成,仅供参考
TLS 加密原理
解读 TLS 证书
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了TLS加密原理和证书解读,以及前向加密的概念。通过对证书内容的解读,读者可以了解到TLS证书的结构和相关信息,以及如何通过命令行工具观测TLS连接所协商出的密码套件。此外,文章还介绍了TLS的软件实现,如OpenSSL等开源TLS库。在客户端如何进行TLS解密的步骤方面,作者详细介绍了创建存放密钥信息的日志文件、配置环境变量、以及在Wireshark中进行相关设置。同时,还解释了SSLKEYLOGFILE文件的格式和作用,以及Wireshark是如何通过该文件解密TLS报文的。此外,文章还介绍了服务端如何做TLS解密,探讨了服务端解密的重要性和实现方法。通过具体的操作步骤和示例,帮助读者更好地理解和应用TLS加解密技术。对于对网络安全和加密通信感兴趣的读者来说,本文是一份有价值的学习资料。文章还提到了TLS1.3中的密钥交换算法被强制要求是前向加密算法,以及前向加密可以防止黑客破解发生在过去的加密流量,提供了更好的安全性。同时,还介绍了Wireshark能解读出密文的原理,以及留下了两道思考题,引发读者思考和交流。
《网络排查案例课》,新⼈⾸单¥59
全部留言(21)
- 最新
- 精选
- Realm问题一: 1 DH算法是为了解决密钥协商的算法,Bob和Alice分别用对方的公钥和自己的私钥,一通骚操作后,得到相同的会话密钥k,这就解决了密钥不直接传输而通过协商出来; 2 DH有static DH和DHE两种实现,static的方式,私钥是不变的,有被破解的可能性,进而搞出来DHE,每次双方的私钥都变化,安全性提高了不少; 3 DHE算法性能不行,然后出现基于椭圆曲线的ECDHE; 参考:https://www.likecs.com/default/index/show?id=124371 问题二: 经过测试curl也会读取SSLKEYLOGFILE,并把随机数和secret写入到这个文件中 SSLKEYLOGFILE=/my/path/to/file.log curl https://example.com 参考:https://davidhamann.de/2019/08/06/sniffing-ssl-traffic-with-curl-wireshark/
作者回复: 很好:)我提第二个问题也是想鼓励大家去实践一下,这个过程会把知识掌握的更好,你做的很赞~
2022-03-0735 - kissingersSecret:这就是 Master secret,也就是通过它可以生成对称密钥。---------->老师,这个应该是premaster吧,fun(client 随机数+server 随机数+premaster) 才算出master 吧
作者回复: 可以参考这个文档:https://firefox-source-docs.mozilla.org/security/nss/legacy/key_log_format/index.html RSA: 48 bytes for the premaster secret, encoded as 96 hexadecimal characters (removed in NSS 3.34) CLIENT_RANDOM: 48 bytes for the master secret, encoded as 96 hexadecimal characters (for SSL 3.0, TLS 1.0, 1.1 and 1.2) 如果keylog文件中,记录行的开头是CLIENT_RANDOM,那么第三列的数字是master secret。如果开头是RSA,那么第三列就是premaster secret。 供你参考:)
2022-05-113 - 晴天了对如何在linux抓取https明文包有点困惑 老师有什么工具推荐吗
作者回复: 你好,课程里有介绍,对于一个客户端来说,就是下面三个步骤: 1. 创建一个用来存放 key 信息的日志文件,然后在系统里配置一个环境变量 SSLKEYLOGFILE,它的值就是这个文件的路径。 2. 重启浏览器,启动抓包程序,然后访问 HTTPS 站点,此时 TLS 密钥信息将会导出到这个日志文件,而加密报文也会随着抓包,被保存到抓包文件中。补充:如果是 Mac 又不想改动全局配置,那么你可以在 terminal 中的 export SSLKEYLOGFILE=路径,然后执行 open "/Applications/Google\ Chrome.app",这时 Chrome 就继承了这个 shell 父进程的环境变量,而 terminal 退出后,这个环境变量就自动卸除了。 3. 在 Wireshark 里,打开 Preferences 菜单,在 Protocol 列表里找到 TLS,然后把 (Pre)-Master-Secret log filename 配置为那个文件的路径。 如果你说的linux是指服务端,那要看具体的应用本身。比如,如果这台linux是nginx,那么可以参考我对“宝仔”铜须的提问的答复,即:默认不行,所以有人写了一个程序模块在做这件事,参考https://security.stackexchange.com/questions/216065/extracting-openssl-pre-master-secret-from-nginx
2022-04-082 - walker我在抓极客的页面是发现了protocol类型多了一个HTTP/JSON,为什么协议会有 http/json 类型的
作者回复: 你是指wireshark里看到的吗?
2022-08-24归属地:上海21 - ray老师您好, 验证server这环节有点不明白。请老师看看我的思考脉络是否正确。 client拿到server回传的证书后,会验证证书是否有CA的签名,验证通过后即确认server的身份是合法的。 问题是,CA签发给server的证书所有人都拿的到,这表示所有人都可以伪装成server。 请问验证server这个环节,client是不是还会用server的公钥加密一个字串给server用私钥解密,以确认server的真实身份(因为私钥在不外泄的状况下只有server才有)? 感谢老师的解答^^
作者回复: 您提的问题很好。严格来说,这里需要做两次不同的验证: 1. 这张server证书是否确实为CA所签发? 2. 这张server证书是否确实为当前我连接的站点所拥有? 第一个校验,是通过证书的签名部分完成的。假设CA1给公司abc签发了一张abc.com的证书,那么这张证书的签名部分是用CA1的私钥做了签名(你可以认为就是加密)。客户端会用CA1的公玥(这是公开的,就在每个客户端的trust store里)去尝试解开签名部分。如果能解开并且内容正确,那么这个签名就是有效的。所以CA的私钥的安全级别特别高,一旦泄露,就是重大的安全事故,这个CA的可信度也大为降低,很可能被各大客户端(浏览器、操作系统等)除名。 第二个校验也比较容易理解。TLS在工作的时候大体上有两个阶段: 阶段一:用非对称算法加密对称密钥 阶段二:用阶段一生成的对称密钥加密要传输的数据 只有真的拥有server证书对应的私钥,才能顺利完成阶段一,也就完成了对server身份的校验。
2023-09-10归属地:中国台湾 - 仄言linux 客户端 使用tcpdump 怎么抓取https 解密?
作者回复: tcpdump只是抓取网络报文(TLS报文),具体的解密是需要密钥文件的,而密钥文件是通过“openssl库能通过SSLKEYLOGFILE这个系统变量来导出”这个特性来实现的。 有了tcpdump的抓包文件,结合密钥文件,wireshark就可以解出密文。 如果你问的是tcpdump抓取https流量的具体命令,那就很简单。如果https是在443端口上,那就是tcpdump port 443 如果要导出到文件,就假设-w file.pcap,比如变成tcpdump -w file.pcap port 443 如果还是抓取不到报文,有可能要指定抓取所有网卡接口,加上-i any,就变成tcpdump -i any -w file.pcap port 443
2022-09-13归属地:上海 - piboyeJust TrustMe 解决 ssl pin 的方法, 老师可以也一块介绍吗?
作者回复: ssl pin是指,做了pin(别针绑定)的证书才会被这个客户端(比如app)信任,其他的证书哪怕是合规CA签发的也不信任。这样可以达到更高的安全级别(当然也会带来别的问题)。 你说的Just TrustMe能破解ssl pin,推测是从系统内部hook了跟ssl通信相关的函数。比如,本来走向ssl verification的函数被替换了,而这个替换函数就不会去校验是否有pin了,那就相当于解除了pin。 andriod方面我是外行,不过从原理上讲估计就是这样了~
2022-08-06归属地:上海2 - 斯蒂芬.赵为什么curl的时候,有的可以解析,有的不可以,比如https://www.baidu.com可以解密出https,但是curl https://openapi-fxg.jinritemai.com 就解密不出来?
作者回复: 解密不出来,具体是指什么?keylog文件里没有对应的key信息生成?还是有keylog信息,但是导入到wireshark后还是不能解密?
2022-07-28归属地:上海 - 斯蒂芬.赵如果是命令行curl请求,不是通过浏览器访问,是否能解密呢?
作者回复: 我看你已经自己搞定啦:)
2022-07-28归属地:上海 - 青梅煮酒请问Windows上配置了SSLKEYLOGFILE环境变量后,重启浏览器抓包,文件里面sslkey.log不会写入东西,老师有遇到吗
作者回复: 在重启浏览器之前sslkey.log里有写入东西吗?还是说从来没有没有写入过?如果是后者,那要看看具体步骤是否有遗漏了,你可以再试一下再回复我~
2022-05-26