다음 Java 코드를 사용하여 소켓 프록시를 통해 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 : SOCKS 연결의 "내부"에 TLS를 사용하고 있으므로 TLS 1.2 메시지가 표시됩니다. SOCKS 연결은 실제로 연결의 초기 데이터 일 뿐이므로 프록시가 연결할 위치와 인증을 알립니다. 이 악수 후에 원래 (TLS) 메시지가 전송되므로 wireshark에서도이 메시지를 볼 수 있습니다. –