Я реализую собственную фабрику сокетов TLS через прокси-сервер SOCKS.Среди других методов, которые я должен переопределить, это Socket createSocket()
, который просто создает неподключенный сокет, который будет подключен где-то позже в коде.
То есть на фабрике сокетов TLS без SOCKS-прокси, способ его реализации следующий:
@Override
public Socket createSocket() throws IOException, UnknownHostException {
// Initialize my SSL Context
SSLContext sslCtx = initializeSSLContext();
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
// Return an unconnected socket
return socketFactory.createSocket();
}
В моей фабрике сокетов TLS over SOCKS эквивалент примерно такой:
@Override
public Socket createSocket() throws IOException, UnknownHostException {
// proxy is an instance of java.net.Proxy
Socket socks = new Socket(proxy);
// Initialize my SSL context
SSLContext sslCtx = initializeSSLContext();
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
return socketFactory.createSocket(socks, ????, ????, true);
}
Как я упоминал ранее, мне нужно иметь возможность создавать сокет, не подключая его.SSLSocketFactory
предоставляет два метода для создания сокетов поверх существующего, но оба предполагают, что вы знаете host:port
, к которому вы подключаетесь.
Есть ли способ создать сокет TLS поверх существующего сокета (прокси)но без предоставления целевого хоста?
Заранее спасибо