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) 这比有点混乱给我更多,我也没有成功实现它。当我尝试中,展开()调用产生一个空的缓冲区,在那里我知道(在命令行中使用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());

--------------解决方案-------------

此实现缺少一些关键件。 即握手可以在几个国家之间的反弹NEED_WRAP,NEED_UNWRAP,NEED_TASK协商的连接。 这意味着你不能只叫一个,然后另一个。 您将需要循环状态,直到握手已经完成。

while (handshaking) {
switch (state) {
case NEED_WRAP:
doWrap();
break;
case NEED_UNWRAP:
doUnwrap();
break;
case NEED_TASK:
doTask();
break;
}
}

Java的SSL和NiO的完整工作示例

现在说,你应该知道在Android上的SSLEngine坏了。 谷歌建议使用线程,并根据该线程阻塞插座。

unwrap()可以产生一个空的缓冲区,如果什么解开了SSL握手消息或警报,而不是应用程序数据。 有没有足够的信息在这里多说了。 什么是事后引擎状态?

beginHandshake不进行握手,它只是用来通知要执行握手下一个电话来包装/解包的的SSLEngine。 当你想要做另一个握手这是很有用的。 对于初始之一,它是不需要的作为第一呼叫包裹将发起握手。

此外,你要检查包装的结果,并拆开包装方法知道所有的数据已被正确编码。 它可能发生,你必须调用的方法多次来处理所有的数据。

下面的链接可能帮助:http://onjava.com/onjava/2004/11/03/ssl-nio.html

或者这样的问题:SSL握手使用自签名的证书和SSLEngine的(JSSE)

我写的东西,使使用更方便SSLEngine的。 它可以与NIO或用于其他用途的情况下使用。 可在这里SSLFacade

分类:安卓 时间:2015-03-16 人气:12
本文关键词: 机器人,让SSLEngine
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.272 (s). 10 q(s)