如何使用 TLS保护 JavaSocketChannel
或ServerSocketChannel
什至是 a ?DatagramChannel
问问题
17357 次
3 回答
20
您需要使用SSLEngine
, 如Non-blocking I/O with SSLEngine中所述。您提到的库使用它或使用使用它的库。
(请注意,这是出了名的难以使用。)
您可能会发现这些链接很有趣:
- 这个答案(其中还包含指向书籍章节的链接)。
- 来自在Grizzly中实现它的Jean-François Arcand 的笔记。
- 使用异步 SSL/TLS 可能遇到的问题类型示例。
- 熟悉这些this question中提到的问题也应该是相关的(特别是如何在异步模式下处理它们)。
- 简单框架还支持异步 SSL/TLS 。
对于数据报,您应该考虑使用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 回答