Java.nio频道和TLS

XZS*_*XZS 12 java ssl nio socketchannel

如何使用TLS 保护Java SocketChannel,ServerSocketChannel或者甚至是a DatagramChannel

我知道有一些框架(#1 #2)可以做广告,但我想知道是否有可能仅使用纯Java标准库来实现这一点.

Bru*_*uno 18

您需要使用SSLEngine,如SSLEngine的非阻塞I/O中所述.您提到的库使用它或使用使用它的库.

(请注意,这是非常难以使用的.)

您可能会发现这些链接很有趣:


对于Datagrams,您应该考虑使用DTLS而不是TLS.我不确定它在Java中的实现状态,但你可以深入研究java.openjdk.security.devel邮件列表的档案.


Jon*_*nas 8

您需要使用SSLEngine并使用该状态机手动进行握手.SSL/TLS是在TCP之上实现的,所以你不能直接在它上面使用它DatagramChannel.

使用Java NIO的文章SSL可能会有所帮助.

  • O'reilly的链接似乎已经死了 (3认同)

Mar*_*ios 5

正如布鲁诺正确提到的那样,这样做的标准方法是使用 SSLEngine。但是该类非常难以使用

前段时间我遇到了同样的问题,最终编写了自己的库。那里有一些示例,当然也有像 Netty 等项目内部的代码。但是这两种选择都不是健壮的或易于重用的。

TLS 通道将 SSLEngine 包装在 ByteBuffer 中,并允许像普通的 SocketChannels 一样使用它。

  • @jyemin,希望现在还不算太晚,但 [最新版本](https://github.com/marianobarrios/tls-channel/releases/tag/0.2.0) 包含异步通道支持。 (2认同)