15

如何使用 TLS保护 JavaSocketChannelServerSocketChannel什至是 a ?DatagramChannel

我知道有一些框架(#1 #2)宣传能够,但我想知道是否有可能单独使用纯 Java 标准库来实现这一点。

4

3 回答 3

20

您需要使用SSLEngine, 如Non-blocking I/O with SSLEngine中所述。您提到的库使用它或使用使用它的库。

(请注意,这是出了名的难以使用。)

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


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

于 2012-02-02T19:18:17.427 回答
9

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

使用 SSLEngine 的非阻塞 I/O 一文可能会有所帮助。

于 2012-02-02T19:16:17.833 回答
5

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

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

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

于 2017-07-22T23:41:08.727 回答