袜子代理上的SSL套接字 - 是客户端< --->服务器数据加密?

时间:2017-11-29 08:53:35

标签: ssl proxy socks

我使用以下java代码在socks代理上创建一个ssl套接字。

SocketAddress addr = new InetSocketAddress(proxy_ip, prox_port);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr);
Socket plainSocket = new Socket(proxy);
InetSocketAddress dest = new InetSocketAddress(server_ip, 443);
plainSocket.connect(dest);
socket = (SSLSocket) sslSocketFactory.createSocket(plainSocket, config.getApiHost(), config.getApiPort(), true);
socket.startHandshake();

此代码有效;但我不确定代理数据的客户端是否加密。在wireshark中,我看到只有代理和服务器之间的数据才被加密。任何人都可以说,为什么会这样,我们如何加密客户端和代理之间的数据?

2 个答案:

答案 0 :(得分:3)

SOCKS本身不会对任何内容进行加密,也不会破坏任何加密。它所做的只是在客户端和目标服务器之间转发数据而不做任何更改。因此,如果您的数据已经加密,它将保持不变。如果它没有加密,那么它将被打开以进行嗅探和修改,因为SOCKS不会为传输添加任何保护。

在您的特定情况下,您在SOCKS连接中使用SSL,这意味着应用程序数据将以与没有SOCKS代理相同的方式加密:如果您正确使用SSL(强密码,正确的服务器身份验证),它也将是强大的使用SOCKS代理时受保护。如果您无法正确执行SSL(例如未正确验证服务器证书),SOCKS将无助于保护数据。相反,在这种情况下,SOCKS服务器的运营商可能很容易将您的不安全的SSL连接放在中间位置,因为他在网络中处于正确的位置时可以做到这一点。

答案 1 :(得分:1)

已编辑 SOCKS握手未加密。建立上游连接后,代码与上游对等体之间会发生SSL握手,SSL从那里开始端到端。 SOCKS代理不知道它正在经历什么。