次のJavaコードを使用して、socksプロキシ経由でsslソケットを作成しています。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では、プロキシとサーバーの間のデータだけが暗号化されていることがわかります。なぜこれが当てはまるのですか?クライアントとプロキシの間でデータを暗号化するにはどうすればよいですか?
しかし、wiresharkでは、私はTLSV1.2パケットがプロキシとサーバーの間に入ることしか見ていません。アプリケーションデータは暗号化されていることが示されています。しかし、クライアントとプロキシの間では、暗号化されていないデータフィールドを持つTCPパケットが送信されています。私はSOCKSサーバー用のcharlessプロキシを使用しています。 – user3202934
@ user3202934:TLS 1.2メッセージは、SOCKS接続の「内側」にあるTLSを使用しているために表示されます。 SOCKS接続は実際には、接続の初期データだけで、プロキシに接続先と認証が分かるようにします。このハンドシェイクの後、元の(TLS)メッセージが送信され、それがwiresharkでも見ることができます。 –