【发布时间】:2012-02-02 19:06:55
【问题描述】:
如何使用 TLS 保护 Java SocketChannel、ServerSocketChannel 或者甚至是 DatagramChannel?
【问题讨论】:
-
@MauricioLinhares:这些示例适用于
SSLSockets,而不是 NIO。
标签: java nio ssl socketchannel
如何使用 TLS 保护 Java SocketChannel、ServerSocketChannel 或者甚至是 DatagramChannel?
【问题讨论】:
SSLSockets,而不是 NIO。
标签: java nio ssl socketchannel
您需要使用SSLEngine,如Non-blocking I/O with SSLEngine 中所述。您提到的库使用它或使用使用它的库。
(请注意,这是出了名的难以使用。)
您可能会发现这些链接很有趣:
对于数据报,您应该考虑使用DTLS 而不是 TLS。我不确定它在 Java 中的实现状态,但您可以翻阅 java.openjdk.security.devel 邮件列表的档案。
【讨论】:
您需要使用SSLEngine 并使用该状态机手动进行握手。 SSL/TLS 是在 TCP 之上实现的,因此您不能直接在 DatagramChannel 之上使用它。
文章Non-blocking I/O with SSLEngine 可能会有所帮助。
【讨论】:
正如 Bruno 正确提到的,这样做的标准方法是使用 SSLEngine。但是那个类真的很难用。
前段时间我遇到了同样的问题,最终编写了自己的库。那里有一些示例,当然还有 Netty 等项目中的代码。但是这两个选项都不是健壮的或易于重用的。
TLS Channel 将 SSLEngine 包装在 ByteBuffer 中,并允许像普通的 SocketChannel 一样使用它。
【讨论】: