我正在查看java.nio.channels包的类,但只找到了普通的socket实现。我可以使用SSLEngine对流量进行加密和解密,但这需要相当多的处理。有人知道是否有一个适当的SocketChannel实现/扩展,可以在内部处理加密吗?
我正在查看java.nio.channels包的类,但只找到了普通的socket实现。我可以使用SSLEngine对流量进行加密和解密,但这需要相当多的处理。有人知道是否有一个适当的SocketChannel实现/扩展,可以在内部处理加密吗?
我所见过的最简单的实现是 alkarn SSL Engine Example。 这可能是你要寻找的。这是SSLEngine的一个实际实现,总共只有3个类。你可以直接复制并运行。
我会在这里粘贴他的一些文档页面以方便:
服务器:
NioSslServer server = new NioSslServer("TLSv1.2", "localhost", 9222);
server.start();
客户端
NioSslClient client = new NioSslClient("TLSv1.2", "localhost", 9222);
client.connect();
我相信这里的目标是让开发者完全控制实现,以免使软件包无法使用。
SSLEngine的替代方案
你也可以使用Jetty或类似的工具:
过去有一个叫做“SslSelectChannelConnector”的东西,根据您的环境而定,它可能有效。但是,“SslSelectChannelConnector”自版本9以来已被弃用。
可以使用org.eclipse.jetty.server.SslConnectionFactory进行替换。
您可以在这里查看完整文档:Jetty Docs 9.4.7.v20170914
这是使用SslConnectionFactory的示例:Eclipse Github Example 您可能也会对“嵌入式Jetty”方法感兴趣:Embedded Jetty Example根本问题在于,如果没有选择器线程,你无法在NBIO套接字上内部实现SSLEngine,因为SSLEngine可能需要在代码未读取或写入数据时读取/写入数据。如果以这种方式实现,性能将非常糟糕。