在Java中的现有套接字上创建未连接的SSLSocket

时间:2018-12-13 17:02:02

标签: java sockets network-programming

我正在通过SOCKS代理实现自定义TLS套接字工厂。我要覆盖的其他方法之一是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套接字工厂 中,等效项大致如下:

@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套接字,但不提供目标主机吗?

预先感谢

1 个答案:

答案 0 :(得分:0)

使用SSLSocketFactory.createSocket()创建一个未连接的套接字。在此处查看文档以了解更多详细信息SSLSocketFactory