如何使用TLS保护Java SocketChannel
,ServerSocketChannel
或甚至DatagramChannel
?
答案 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一样使用它。