有没有办法将SSLContext与ServerSocketChannel一起使用?



我有一个应用程序,我需要在其中使用ServerSocketChannelSocketChannel,但是SSLContext给了我ServerSocketFactory,它提供了ServerSocket并接受Socket中的连接。

谢谢

这样做的标准方法是使用SSLEngine。但是这个类很难使用。有一些教程,但对于典型的应用程序,使用 SSLEngine

应该是不可能的。前段时间我遇到了同样的问题,最终编写了自己的库。有一些例子,当然还有Netty等项目中的代码。但这两种选择都不可靠或易于重用。

TLS 通道将 SSLEngine 包装在 ByteBuffer 中,并允许像普通套接字通道一样使用它。

"基本"JSSE.getSocketFactory.getServerSocketFactory间接创建客户端SSLSocket,或SSLServerSocket,而又创建服务器端SSLSocket,在这两种情况下,子类Socket(带有一些添加的方法)并以简单的等待样式管理SSL/TLS协议和网络I/O,这对于(大多数)应用程序来说是最简单的。

要使用通道,您必须创建一个仅处理SSL/TLS协议而不处理网络(或其他!H/..然后,您自己读取和写入SocketChannel,发送SSLEngine已"包装"的数据,并为其提供接收到的数据以"解包"。

有关概述,请参阅 https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SSLEngine 其中有部分示例代码 -- 对于客户端;您需要通过将setUseClientMode更改为false而不使用对等标识提示来修改此内容。(SSL/TLS 客户端必须(缓存并)按服务器标识选择保存的会话,但服务器仅使用之前分配的会话 ID 并记住客户端。

然后,在 https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLEngine.html 或您最喜欢的JDK/IDE中查看SSLEngine类的javadoc(带有异常详细的介绍)。

或者Java SSLEngine示例有一些来自做过示例的人的链接,但我自己没有看过它们。

相关内容

  • 没有找到相关文章

最新更新