【问题标题】:Java.nio Channels and TLSJava.nio 通道和 TLS
【发布时间】:2012-02-02 19:06:55
【问题描述】:

如何使用 TLS 保护 Java SocketChannelServerSocketChannel 或者甚至是 DatagramChannel

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

【问题讨论】:

标签: java nio ssl socketchannel


【解决方案1】:

您需要使用SSLEngine,如Non-blocking I/O with SSLEngine 中所述。您提到的库使用它或使用使用它的库。

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

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


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

【讨论】:

    【解决方案2】:

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

    文章Non-blocking I/O with SSLEngine 可能会有所帮助。

    【讨论】:

    • O'reilly 的链接似乎已失效
    【解决方案3】:

    正如 Bruno 正确提到的,这样做的标准方法是使用 SSLEngine。但是那个类真的很难用。

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

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

    【讨论】:

    • 不错!有计划在该库中支持 AsynchronousSocketChannel 吗?
    • @jyemin,似乎是可行的,应该可以作为现有界面之上的附加层。不知何故,我们需要包装一个选择器循环like the one we have already as a test。欢迎请求请求! :-)
    • @jyemin,希望为时不晚,但 latest release 包含异步通道支持。
    猜你喜欢
    • 2014-11-14
    • 1970-01-01
    • 2013-02-11
    • 2014-12-18
    • 2018-04-06
    • 2018-12-19
    • 1970-01-01
    • 2010-09-21
    • 2021-12-13
    相关资源
    最近更新 更多