Пример Android SSLEngine

Мне нужно работать с TCP-сокетом через TLS для приложения, которое я работа над. Я прошел через десятки примеров, и хотя у меня нет проблем с рукопожатием, я не могу прочитать входной поток любыми способами (много пробовал, включая readline(), чтение в массив символов и т. д.). каждый раз, когда я пытаюсь, приложение зависает на этом месте. Если я отлаживаю, он никогда не переходит к следующей строке кода.

Пытаясь найти решение, я решил перейти к использованию SSLEngine, так как это должен был быть ответ Java 1.5 на java.nio для SSL. Однако я нашел одинпример (здесь: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/samples/sslengine/SSLEngineSimpleDemo.java ), что меня более чем сбивает с толку, и мне не удалось его реализовать. Когда я пытаюсь, вызов unwrap() дает пустой буфер, где я знаю (используя OpenSSL в командной строке), что рассматриваемая служба отправляет данные обратно по каналу.

Предложения приветствуются, я уже потратил слишком много времени на это. Вот соответствующий код:

SSLEngine engine = sslContext.createSSLEngine(uri.getHost(), uri.getPort());
            engine.setUseClientMode(true);
            engine.beginHandshake();
            SSLSession session = engine.getSession();
            int bufferMax = session.getPacketBufferSize();
            int appBufferMax = session.getApplicationBufferSize() + 50;
            ByteBuffer cTo = ByteBuffer.allocateDirect(bufferMax);
            ByteBuffer sTo = ByteBuffer.allocateDirect(bufferMax);

            ByteBuffer out = ByteBuffer.wrap(sessionId.getBytes());
            ByteBuffer in = ByteBuffer.allocate(appBufferMax);


            debug("sending secret");
            SSLEngineResult rslt = engine.wrap(out, cTo);
            debug("first result: " + rslt.toString());
            sTo.flip();
            rslt = engine.unwrap(sTo, in);
            debug("next result" + rslt.toString());

6
задан Paul 30 March 2012 в 20:10
поделиться