Java.nio 通道和 TLS

问题描述 投票:0回答:3

如何使用 TLS 保护 Java

SocketChannel
ServerSocketChannel
甚至
DatagramChannel

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

java nio ssl socketchannel
3个回答
22
投票

您需要使用

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

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

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


对于数据报,您应该考虑使用 DTLS 而不是 TLS。我不确定它在 Java 中的实现状态,但您可以挖掘

java.openjdk.security.devel
邮件列表的档案。


9
投票

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

DatagramChannel
之上使用它。

文章使用 SSLEngine 实现非阻塞 I/O 可能会有所帮助。


6
投票

正如 Bruno 正确提到的那样,执行此操作的标准方法是使用 SSLEngine。但那个类说真的很难使用。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.