首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android SSLEngine示例

Android SSLEngine示例
EN

Stack Overflow用户
提问于 2012-03-30 20:10:37
回答 3查看 4.2K关注 0票数 6

我需要使用TLS上的TCP套接字来处理我正在开发的应用程序。我已经看过几十个例子,虽然我没有问题通过握手,但我似乎无法通过任何方式读取输入流(尝试了很多,包括readline()、读到字符数组等)。每次我试一试,应用程序就会冻结在那个地方。如果我调试,它永远不会进入下一行代码。

在一个尝试的解决方案中,我决定转而使用SSLEngine,因为这应该是Java1.5对java.nio的解决方案。然而,我发现了一个例子(在这里:http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/samples/sslengine/SSLEngineSimpleDemo.java),它对我来说有点令人困惑,而且我还没有成功地实现它。当我尝试时,解包()调用会产生一个空缓冲区,在这里我知道(通过在命令行上使用OpenSSL ),所讨论的服务将数据推回管道。

建议是受欢迎的,我已经花了太多的时间在这上面。以下是相关代码:

代码语言:javascript
复制
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());
EN

回答 3

Stack Overflow用户

发布于 2013-06-25 17:51:37

我写了一些东西,使使用SSLEngine更容易。它可以与NIO一起使用,也可以用于其他用例。可在这里获得SSLFacade

票数 1
EN

Stack Overflow用户

发布于 2012-04-02 03:56:14

如果打开的是SSL握手消息或警报,而不是应用程序数据,则unwrap()可以生成空缓冲区。这里没有足够的信息可以说更多。后来引擎状况如何?

票数 0
EN

Stack Overflow用户

发布于 2012-07-20 12:48:12

beginHandshake不进行握手,它只用于通知SSLEngine您想要为下一个要包装/解除包装的调用执行握手。它是有用的,当你想做另一次握手。对于最初的一个,它是不需要的,因为包装的第一个调用将启动握手。

此外,您还必须检查包装和解包装方法的结果,以确定是否所有数据都已正确编码。可能发生的情况是,您必须多次调用这些方法来处理所有数据。

以下链接可能会有所帮助:http://onjava.com/onjava/2004/11/03/ssl-nio.html

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9949806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档