Мне нужно работать с TCP-сокетом через TLS для приложения, над которым я работаю. Я прошел через десятки примеров, и, хотя у меня нет проблем с получением рукопожатия, я не могу читать поток ввода любыми способами (много пробовал, включая readline(), чтение в массив символов и т. Д.). каждый раз, когда я пытаюсь, приложение зависает на этом месте. Если я отлаживаю, он никогда не переходит к следующей строке кода.Android SSLEngine example
В попытке решить, я решил перейти к использованию 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());
Как обновление, я также попытался выполнить цикл при вызове разворота, пока (rslt.getStatus()! = SSLEngineResult.Status.OK), и он никогда не был заполнен, и статус не стал OK. – Paul
Вы пытались запустить этот код в обычном Java-приложении? Это, по крайней мере, поможет определить, является ли его проблема специфичной для Android или нет. – elevine
Да, я не думаю, что это специфично для Android, я просто делаю это в проекте Android. – Paul