我正在通过SOCKS代理实现自定义TLS套接字工厂。我应使用替代的其他方法是Socket createSocket()
,它只是创建一个未连接的套接字,该套接字将在代码的稍后位置进行连接。
因此,在没有Socket代理的的TLS套接字工厂中,我的实现方式如下:
@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套接字工厂和 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套接字,但不提供目标主机吗?
提前致谢
最佳答案
使用SSLSocketFactory.createSocket()
创建未连接的套接字。在此处检查文档以获取更多详细信息SSLSocketFactory
关于java - 在Java中的现有套接字上创建未连接的SSLSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53766747/