前言
相信很多小伙伴在工作中都经常会和HTTPS流量打交道,那么在应对https协议的流量时都要注意些什么呢?
0x01哪些HTTPS流量无法被解密?
使用RAS加密套件加密的HTTPS流量可以被私钥解密,使用ECDH加密套件加密的HTTPS流量无法通过私钥解密。而且现在很多HTTPS网站都支持DH加密套件加密而且浏览器默认都会优先选择ECDH加密套件作为本次会话的加密套件。
0x02如何判断会话使用的加密套件
- 在访问HTTPS网站时抓取请求的流量,在流量当中服务端发送Client Hello时会携带自己支持的加密套件。
2.在客户端响应服务器Server Hello时会返回自己支持的加密套件,这里可以看到是ECDH加密套件,这种加密方式的套件无法被解密。
3.这个是使用RAS套件加密的会话。
0x03为什么ECDH加密套件无法解密
目前https使用的密钥交换加密套件主要为RSA和ECDH两种,其中采用RSA加密的流量一旦拥有私钥即可解密之前会话所有的HTTPS流量。而ECDH加密则不存在该问题。
import ssl
import 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()
3.切换为ECDHE加密发现无法解密。
import ssl
import 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流量
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论