SSLServerSocket.accept () зависает при подключении клиента и не отправляет байты - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть некоторые проблемы при приеме SSL-соединений с SSLServerSocket.

Если в приведенном ниже коде клиент подключается к порту ssl, но не отправляет байты (он только устанавливает соединение) икроме того, затем поддерживается соединение, код на стороне сервера зависает в методе sslServerSocket.accept (). Он зависает до тех пор, пока клиент не закроет соединение, тайм-аут не происходит.

Я попытался установить значение setSoTimeout для SSLServerSocket, но это влияет только на часть, когда accept () ожидает новых входящих соединений, ноне ситуация, когда соединение установлено и когда accept () согласовывает SSL-квитирование (например, когда accept () ожидает первые байты, которые клиент не отправил бы).

    [...]
    KeyManagerFactory kmf = KeyManagerFactory.getInstance (KeyManagerFactory.getDefaultAlgorithm ());
    kmf.init (ks, keystorePassword.toCharArray ());
    SSLContext sc = SSLContext.getInstance ("TLS");
    sc.init (kmf.getKeyManagers (), null, null);
    SSLServerSocketFactory sslServerSocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault ();

    SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketfactory.createServerSocket (3505, 1);
    sslServerSocket.setSoTimeout (3000);
    Log.println ("waiting for accept ...");
    SSLSocket client = null;
    try
    {
        client = (SSLSocket) sslServerSocket.accept ();
    }
    catch (SocketTimeoutException e)
    {
        Log.println ("accept-timeout");
    }
    [...]

Когда указано вышекод выполняется, и никто не подключается, вы получаете Log-выход «accept-timeout» через 3000 миллисекунд, как установлено с помощью setSoTimeout (3000). Пока все в порядке.

Но если кто-то подключается в течение этого времени, а затем не отправляет байты, методы accept () блокируются навсегда или до тех пор, пока (вредоносный) клиент удерживает соединение.

Есть идеи, как можно установить время ожидания для согласования SSL-рукопожатия?

С уважением, Томас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...