rt,在客户端使用 https,并且没有安装服务端签发的证书情况下,服务端理论上可以实现中间人攻击吗?
1
windyland 2019-12-21 22:38:22 +08:00 via Android
不能,socks 只能拿到加密后的数据
|
2
ZRS 2019-12-21 22:47:29 +08:00
不能
|
3
binux 2019-12-22 01:25:09 +08:00 via Android
当然可以啊,只是不能不被发现。你让客户忽略证书错误不就好了。
|
4
lihongming 2019-12-22 04:00:19 +08:00 via iPhone
短期不行,长期可以分两步走——
1. 诱骗用户安装你的根证书 2. 给自己签发相关域名(可以用通配符)的证书,然后作为中间人监听 这里面的关键是诱骗用户安装你的根证书。如果在国外这不容易,但在中国很简单,因为很多中国网站在用自签发证书(比如 12306 )。所以你发和它发没什么区别,反正都是不受信任的,嫌麻烦的用户自然会安装。 |
5
serge001 OP |
6
linhua 2019-12-22 09:51:18 +08:00
不安装证书 是 看不到 HTTPS 里面的明文的,shadowsocks 只是起到 流量转发的作用,看不到明文
|
7
lihongming 2019-12-22 10:21:22 +08:00
@serge001 @linhua 也不能说看不到 HTTPS 里面的明文,而是客户端会提示风险,中间人就被发现了。
HTTPS 的原理大概如下: 1. 浏览器有一个受信的根证书列表 2. CA 们用这些根证书签发域名证书给网站 3. 网站用域名证书的私钥把 http 传输的内容加密,并连同公钥一起传给浏览器 4. 浏览器检查公钥是否由受信任的根证书签发 5. 如果公钥确实由受信任的根证书签发,则继续检查域名与证书是否匹配 6. 如果都没问题,则用公钥解密并显示内容 以上是个精简版的步骤,其实还有有效期、吊销列表等检查,暂且不表。 如果第 4 步有问题,则浏览器会提示“此网站出具的安全证书不是由受信任的证书颁发机构颁发的”。因为很多企业的内部系统会使用自签发证书,所以用户可以选择将根证书加入受信任列表,以后就不会再提示了。 如果第 5 步有问题,则浏览器会提示“安全证书上的名称无效,或者与站点名称不匹配”。 所以,如果你想做“中间人”,就必须在第 4 步之前截获数据,然后用正版的证书解密内容,就好像你是发出请求的那个浏览器一样。然后再用盗版证书把数据加密,并连同盗版证书的公钥一起发给浏览器。如果你的盗版证书是受信任的,且域名无误的话,则用户不会看到任何警告。 |
8
aqutor 2019-12-22 10:32:45 +08:00
@lihongming #4 12306 已经没有用自签名证书了。
|
9
serge001 OP @lihongming 非常感谢回复,所以我的理解是如果客户端不信任第三方自签证书,socks5 服务端拿到的也是加密后的传输层数据,看不到明文的是吗?
|
10
lbp0200 2019-12-22 10:53:12 +08:00 via iPhone
你以为看不到明文就不知道你在干嘛了? too young
|