Java.nio Channels and TLS

2022-09-03 09:46:06

我如何用TLS保护Java,或者甚至可能是一个?SocketChannelServerSocketChannelDatagramChannel

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


答案 1

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

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

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


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


答案 2

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

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