有私钥为什么无法解密https流量

admin 2024年9月29日09:21:32评论6 views字数 1446阅读4分49秒阅读模式

前言

相信很多小伙伴在工作中都经常会和HTTPS流量打交道,那么在应对https协议的流量时都要注意些什么呢?

0x01哪些HTTPS流量无法被解密?

使用RAS加密套件加密的HTTPS流量可以被私钥解密,使用ECDH加密套件加密的HTTPS流量无法通过私钥解密。而且现在很多HTTPS网站都支持DH加密套件加密而且浏览器默认都会优先选择ECDH加密套件作为本次会话的加密套件。

0x02如何判断会话使用的加密套件

  1. 在访问HTTPS网站时抓取请求的流量,在流量当中服务端发送Client Hello时会携带自己支持的加密套件。

有私钥为什么无法解密https流量

2.在客户端响应服务器Server Hello时会返回自己支持的加密套件,这里可以看到是ECDH加密套件,这种加密方式的套件无法被解密。

有私钥为什么无法解密https流量

有私钥为什么无法解密https流量

3.这个是使用RAS套件加密的会话。

有私钥为什么无法解密https流量

0x03为什么ECDH加密套件无法解密

   目前https使用的密钥交换加密套件主要为RSA和ECDH两种,其中采用RSA加密的流量一旦拥有私钥即可解密之前会话所有的HTTPS流量。而ECDH加密则不存在该问题。

详细原因咱就不细聊了,可以简单理解为客户端和服务器利用交换的一些信息各自在自己的设备上计算出了结果相同的密钥,但是攻击者无法单独利用中间交换的信息计算出密钥。拿不到密钥就会导致攻击者无法对流量进行解密。并且每次服务器和客户端建立连接这个密钥都是不同的,即使攻击者通过某种方式获取了一次通信的密钥,也解不开其他的包。
0x04简单小测试
1.使用python的ssl库指定使用rsa套件建立连接。
import  sslimport  http.client
context=ssl.SSLContext(protocol=ssl.PROTOCOL_TLSv1_2)context.set_ciphers("!ECDHE:!ECDSA:!NULL:aRSA")
connect=http.client.HTTPSConnection("x.xxx.x.xxx","443",context=context)connect.connect()connect.request("GET","/../../../../../etc/passwd")connect.getresponse()
2.尝试使用wireshark通过私钥解密流量,发现可行。

有私钥为什么无法解密https流量

3.切换为ECDHE加密发现无法解密。

import  sslimport  http.client
context=ssl.SSLContext(protocol=ssl.PROTOCOL_TLSv1_2)context.set_ciphers("ECDHE")
connect=http.client.HTTPSConnection("x.x.x.x","443",context=context)connect.connect()connect.request("GET","/../../../../../etc/passwd")connect.getresponse()

0x05其他

 

那WAF为什么可以正常工作呢?,那是因为WAF一般采用反向代理的部署方式,这种情况就是用户和WAF通信,WAF和服务器通信,WAF自然能获得明文流量。需要注意的是WAF在透明代理模式下依然无法解密ECDHE加密的HTTPS流量。


创作不易,转载请注明出处。笔者技术有限,可能有些理解较为片面,有不当之处,直接公众号联系我。

原文始发于微信公众号(地表最强伍迪哥):有私钥为什么无法解密https流量

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月29日09:21:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   有私钥为什么无法解密https流量http://cn-sec.com/archives/2024946.html

发表评论

匿名网友 填写信息