网络排查案例课
杨胜辉
eBay 资深运维专家,流量系统负责人
22781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
实战三:不用抓包就能做的网络排查篇 (2讲)
网络排查案例课
15
15
1.0x
00:00/00:00
登录|注册

20 | TLS加解密:如何解密HTTPS流量?

重启浏览器恢复握手抓取
新的HTTPS请求未抓取TLS握手
配置Wireshark的TLS协议
启动浏览器和Wireshark抓包
设置SSLKEYLOGFILE环境变量
缺少TLS握手阶段报文无法解密
需要抓包文件和日志文件结合
使用Master secret解析出对称密钥
通过ClientRandom定位TLS会话
包含Master secret信息
格式:<Label> <ClientRandom> <Secret>
Wireshark配置(Pre)-Master-Secret log filename
重启浏览器,启动抓包程序
设置环境变量SSLKEYLOGFILE
每次会话临时生成密钥
Forward Secrecy 和 Perfect Forward Secrecy
完整性校验算法(SHA-256)
对称加密算法(通过握手协商)
身份验证和签名算法(ECDSA)
密钥交换算法(DHE或ECDHE)
SAN(Subject Alternative Name)
证书名称、身份验证和签名算法、有效期
证书链
密码套件:四种主要加密算法的组合
对称加密与非对称加密结合
curl是否也会读取SSLKEYLOGFILE变量导出key信息
DH、DHE、ECDHE的联系和区别
抓包停止后密文问题
实时查看解密信息
配置Envoy导出TLS key
使用BoringSSL的SSLCTXsetkeylogcallback()回调函数
Envoy实现TLS抓包解密
服务端解密不常讨论
SSLKEYLOGFILE的安全性
SSLKEYLOGFILE
应用程序基于TLS库实现加解密功能
GnuTLS
NSS
OpenSSL
前向加密(PFS)
解读TLS证书
思考题
几个问题
服务端如何做TLS解密?
Wireshark是怎么解开密文的?
客户端如何做TLS解密?
TLS的软件实现
TLS加密原理
TLS加解密:如何解密HTTPS流量?

该思维导图由 AI 生成,仅供参考

你好,我是胜辉。
在上节课里,我们对 TLS 的整体的知识体系做了总览性的介绍,然后回顾了两个实际的案例,从中领略了 TLS 握手的奥妙。我们也知道了,TLS 握手的信息量还是很大的,稍有差池就可能引发问题。我们只有对这些知识有深刻的理解,才能更准确地展开排查。
不过,也正因为这种种严苛的条件,TLS 才足够安全,因为满足了这些前提条件后,真正的数据传送就令人十分放心了。除非你能调动超级计算机或者拥有三体人的智慧,要不然一个 TLS 连接里面的加密数据,你是真的没有办法破解的。
可话说回来,如果排查工作确实需要我们解开密文,查看应用层信息,那我们又该如何做到呢?
所以在这节课里,我会带你学习 TLS 解密的技术要点,以及背后的技术原理,最后进行实战演练,让加密不再神秘。好了,让我们开始吧。

TLS 加密原理

在上节课里我们已经了解到,TLS 是结合了对称加密和非对称加密这两大类算法的优点,而密码套件是四种主要加密算法的组合。那么这些概念,跟我们的日常工作又有着什么样的交集呢?

解读 TLS 证书

下面这个证书,是我在访问站点https://sharkfesteurope.wireshark.org的时候获取到的,我们来仔细读一下这里面的内容,看看哪些是跟我们学过的 TLS 知识相关的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了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-07
    3
    5
  • kissingers
    Secret:这就是 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-11
    3
  • 晴天了
    对如何在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-08
    2
  • walker
    我在抓极客的页面是发现了protocol类型多了一个HTTP/JSON,为什么协议会有 http/json 类型的

    作者回复: 你是指wireshark里看到的吗?

    2022-08-24归属地:上海
    2
    1
  • 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归属地:上海
  • piboye
    Just 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
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部