假如你连了一个恶意的代理,连上一个 https 服务,一般代理是看不到你发送的内容的
但是,代理能不能劫持你的加密内容,重复发送给对应服务,我感觉不太可能,因为 http 是无状态的,链接建立处理完消息就断了,一般不能在一个链接内处理两个 POST 请求,我这个看法不知道对不对?
但如果我连的是一个 websocket(wss)服务,使用了中间代理,这个代理能不能劫持我的消息多次重发?
假设链接的服务是买卖股票,那有没有可能在买股票的时候被代理恶意重发而重复购买?
1
superrichman 2020-12-04 21:49:07 +08:00 via iPhone
代理看不到明文但可以抓包重放。
服务端没事防重放处理就有可能会重复购买。 不要用无法信任的代理服务。 |
2
lujjjh 2020-12-04 22:21:20 +08:00
你也太小看 TLS 协议了。
「因为 http 是无状态的,链接建立处理完消息就断了,一般不能在一个链接内处理两个 POST 请求」也是错误的。 |
3
neteroster 2020-12-04 22:24:23 +08:00 via Android 1
关键词: https replay attack
|
4
des 2020-12-04 22:50:24 +08:00 via iPhone
不仅不能重放,而且还能向前保密,确保私钥泄漏也不能解密
http://wmaintw.github.io/2015/03/07/perfect-forward-secrecy.html |
5
iceheart 2020-12-04 23:04:18 +08:00 via Android
理论上是可能的,-----比如说大整数质因数分解被攻破,或者 AES 对称加密被破解。
|
7
ZRS 2020-12-04 23:46:40 +08:00 via iPhone
TLS 是防重放的
|
8
baobao1270 2020-12-04 23:52:16 +08:00 2
HTTPS 可以防止重放攻击,HTTP 若服务端无防御措施无法防御
|
9
xcstream 2020-12-05 02:45:41 +08:00
应该不能
|
10
deorth 2020-12-05 09:54:22 +08:00
甚至不需要代理,只要路由转发链路上的某一台机器部署了相应服务就可以实现重放。
要是和钱相关的服务连防重放都做不到可以赶紧倒闭了 |
11
jimmyismagic OP @superrichman https 服务端真的需要防止吗?
@lujjjh 举个例子? @neteroster 多谢,有没有权威的论述? @des 所以你们到底谁正确? @iceheart 嗯,被破解当然可以,假如加密无法破解的情况下,用 https 可以防止重放吗? @ZRS 所以你们到底谁对?说说原因 @baobao1270 我感觉也是,websocket(wss)呢? @xcstream websocket(wss)呢? @deorth 不止和钱相关,各种操作都有对个人的数据造成风险,不可能每次写个接口都要考虑是否要防止重放吧 |
12
baobao1270 2020-12-05 10:55:36 +08:00
@jimmyismagic Websocket 好像无法防止,WSS 可以。或者说任何使用 TLS 的应用都能防止重放
但是,在设计程序时,会在 HTTP 应用层再做一次防重放。不过 Websocket 做防止重放的比较少,一般来说 WS 不涉及重要操作,比如聊天,重复一句也是可以的。 |
13
jimmyismagic OP @des 看了你的文章,才知道密钥协商还有这个功能,怪不得我看到很多私有服务都采用 DH 算法,原先以为一个随机密钥就可以了,现在相当于该次连接中在内存中保留了随机私钥没有传输。那么 https 默认是否使用了 DH 这个方式呢?还是哪里需要配置,或者需要在双方应用层协商?
|
14
jimmyismagic OP @baobao1270 wss 感觉应该也无法防止啊,因为你的链接没有断开,服务端直接收消息处理就行了
|
15
superrichman 2020-12-05 12:24:33 +08:00
tls1.3 0-RTT replay
译文 (可重复性 章节) https://www.oschina.net/translate/rfc-8446-aka-tls-1-3?lang=chs&p=3 原文 (Replayability 章节) https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/ 还是要在应用里做防重放. |
16
jimmyismagic OP |
17
des 2020-12-05 18:14:18 +08:00 via iPhone
|
18
des 2020-12-05 18:23:00 +08:00 via iPhone
|
19
jimmyismagic OP @des 当然不考虑中间人攻击和客户端安全证书的问题,就是在正常的情况下,你说了一个是保留历史,等未来拿到私钥或者算法破解了,还有一个是用 DH 算法,可以做到完全向前保密,那么在正常的一个 https 链接下,能不能发两次 POST,http 中的 keep-alive 能不能做到呢?
|