Java.nio频道和TLS

时间:2012-02-02 19:06:56

标签: java nio ssl socketchannel

如何使用TLS保护Java SocketChannelServerSocketChannel或甚至DatagramChannel

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

3 个答案:

答案 0 :(得分:18)

您需要使用SSLEngine中记录的Non-blocking I/O with SSLEngine。您提到的库使用它或使用使用它的库。

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

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


对于数据报,您应该考虑使用DTLS而不是TLS。我不确定它在Java中的实现状态,但你可以挖掘java.openjdk.security.devel邮件列表的档案。

答案 1 :(得分:8)

您需要使用SSLEngine并使用该状态机手动进行握手。 SSL / TLS是在TCP之上实现的,因此您无法直接在DatagramChannel之上使用它。

文章SSL with Java NIO可能会有所帮助。

答案 2 :(得分:2)

正如布鲁诺正确提到的那样,标准的做法是使用SSLEngine。但是那个课程严重难以使用。

前段时间我遇到了同样的问题,最后编写了我自己的库。那里有一些例子,当然还有Netty等项目中的代码。但是这两个选项都不健全或者很容易重用。

the pre-trained and pre-packed models将SSLEngine包装在ByteBuffer中,并允许像普通的SocketChannel一样使用它。