繁体   English   中英

如何使用SSLEngine方法包装和解包应用程序数据?

[英]How do I use the SSLEngine methods wrap & unwrap with application data?

我正在通过简单的客户端/服务器概念验证应用程序在Java中使用SSL和NIO。 我已经握手并运行得很好,但是在尝试加密和解密应用程序数据后,真是发疯了。 我想知道我是否缺少预期用途的东西?

客户端在“有效负载”中有一条小消息,并尝试对其进行加密,如下所示:

ByteBuffer inb  = ByteBuffer.allocate(payload.length);
ByteBuffer outb = ByteBuffer.allocate(
            _sslEngine.getSession().getPacketBufferSize());
SSLEngineResult result = _sslEngine.wrap(inb, outb);
_log.finer("Wrapped " + outb.position() + " octets ("
                + result + ").");
outb.flip();
_log.finer("Cyphertext: " + Buffers.toHexString(outb));

在日志中,我看到:

FINER: Wrapped 53 octets (Status = OK HandshakeStatus = NOT_HANDSHAKING
bytesConsumed = 13 bytesProduced = 53).
Sep 30, 2014 1:33:51 PM PoCClientServer.PoCClient write
FINER: Cyphertext: [17 03 01 00 30 ac bd c3 b8 e4 2e a5 9a 43 41 e1 3a 81 b5 cc b6 6f 9b 55 0e 1a a5 e2 97 f1 a2 be 3d ed f8 2d 45 8b 99 35 70 e3 d2 74 6d da 63 34 5a c9 35 1a 96]

这样看来一切都很好。 服务器将其读入“ _net”,然后尝试解密:

_log.finer("Unwrapping cyphertext " + Buffers.toHexString(_net));

_app.ByteBuffer.allocate(_sslEngine.getSession().getApplicationBufferSize());
SSLEngineResult result = _sslEngine.unwrap(_net, _app);
_log.finer("Unwrapped " + _app.position()
            + " octets(" + result + ").");
_app.flip();
_log.finer("==> " + Buffers.toHexString(_app));

产生:

FINER: Unwrapping cyphertext [17 03 01 00 30 ac bd c3 b8 e4 2e a5 9a 43 41 e1 3a 81 b5 cc b6 6f 9b 55 0e 1a a5 e2 97 f1 a2 be 3d ed f8 2d 45 8b 99 35 70 e3 d2 74 6d da 63 34 5a c9 35 1a 96]
Sep 30, 2014 1:34:00 PM PoCClientServer.handlers.EchoHandler unwrap
FINER: Unwrapped 13 octets(Status = OK HandshakeStatus = NOT_HANDSHAKING
bytesConsumed = 53 bytesProduced = 13).
Sep 30, 2014 1:34:01 PM PoCClientServer.handlers.EchoHandler unwrap
FINER: ==> [00 00 00 00 00 00 00 00 00 00 00 00 00]

一切似乎都还不错...只是明文从未放在'_app'中...我在这里缺少什么?

您永远不会将有效负载放入客户端中的应用程序发送缓冲区,因此您发送了13个空字节。

在那之后,除了错别字外,其他所有东西都工作得很好。

您可能会认为不会发送任何内容,因为缓冲区最初是空的,但是由于您在wrap()之前没有对它进行过flip()操作,因此它似乎处于其中包含13个字节的状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM