Java 如何减少ssl握手的等待时间?
我有以下代码,用于创建套接字并启动ssl握手Java 如何减少ssl握手的等待时间?,java,networking,network-programming,sslhandshakeexception,Java,Networking,Network Programming,Sslhandshakeexception,我有以下代码,用于创建套接字并启动ssl握手 SSLSocketFactory factory = HttpsURLConnection .getDefaultSSLSocketFactory(); System.out.println("Creating a SSL Socket For "+hostname+" on port "+port); SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port); so
SSLSocketFactory factory = HttpsURLConnection
.getDefaultSSLSocketFactory();
System.out.println("Creating a SSL Socket For "+hostname+" on port "+port);
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port);
socket.startHandshake();
System.out.println("Handshaking Complete");
问题是,如果握手无法建立,在我看到异常之前会有很长的等待时间:连接超时
如何设置最大等待时间?什么是确保ssl握手不会成功的最短合适时间。连接超时与握手无关,甚至与ssl无关。调用startAndShake()时不会发生这种情况:它发生在创建套接字时。你的堆栈跟踪会告诉你的 要减少它,请使用默认构造函数创建一个Socket();呼叫连接(SocketAddress地址,长超时);然后,如果成功,调用SSLSocketFactory.createSocket(Socket,…)将其包装在SSLSocket中 注意,你引用的博客质量确实很差。它的一些问题:
SSLSocketFactory factory = HttpsURLConnection
.getDefaultSSLSocketFactory();
System.out.println("Creating a SSL Socket For "+hostname+" on port "+port);
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port);
socket.startHandshake();
System.out.println("Handshaking Complete");
不要依赖那些未经推荐的网站。在执行sslSocket.startHandshake()之前,请使用官方产品文档。;使用sslSocket.setSoTimeout(超时)
setSoTimeout是一个读取超时,因此setSoTimeout中提供的超时值也将与握手一起使用。无论如何,您都应该在线程中执行此操作,因此不必等待握手。SSLSocket提供了
addHandshakeCompletedListener
方法。socket的setotimeout()方法是否可能重复?@EJP无所谓,对于初始握手,提到的超时选项确实有效socket.startHandshake()
将抛出一个异常(已测试的jdk8)@user207421如果我们创建一个如下的服务器套接字,我们如何设置超时<代码>SSLServerSocket套接字=(SSLServerSocket)工厂。createServerSocket(端口,0,bindAddress)如果我们将服务器套接字上的超时设置为socket.setSoTimeout(超时)代码>它也适用于握手吗clientSocket=serverSocket.accept();((SSLSocket)clientSocket).startAndShake()