我对 ssh 动态端口转发如何与 https 一起运行感到困惑。假设有 3 台机器:
- A 运行网络浏览器
- B 运行 sshd
- C 是一个 Web 服务器
在 A 上,我“ssh -D 12345 user@B”并将浏览器配置为使用 localhost:12345 上的 SOCKS 代理。我可以检查 B 的主机密钥,如果我直接查看 https 站点(A -> C),我可以检查证书以发现中间人攻击。
我想知道的是:当代理到位时,https 解密在哪里进行?
B 上的 ssh 是否只是将从 C 收到的未修改的数据包(显然包裹在自己的加密层中)转发到 A 以便在浏览器中解密,还是我自己有效地对 A->C 连接进行了中间人操作?如果 B 上的 ssh 解密来自 C 的数据,然后再重新加密以将其发送回 A,这将是不可取的,因为数据现在以解密状态存在于 B 上(尽管仅在内存中)。这是两种情况中的哪一种?我假设是前者,但我想弄清楚发生了什么。谢谢
答案1
HTTPS 仅在您的浏览器中解密。没有其他任何东西具有所需的密钥。
如果第三方正在解密并重新加密数据,那么这就是一次中间人攻击,除非服务的证书被泄露,否则你会注意到。
由于 SSH 隧道不传输 IP 数据包而只传输其内容,因此数据包不会被修改。但是内容不会被修改。