没有可使用Java实现SSL
与NIO (SocketChannel and SSLEngine)
,不使用框架,如网状等线程安全与SSL + NIO
我想拿出一个SSL
实现,它可以工作了一些有用的信息与blocking/non
阻止频道,并得到了一些基本qns
。
当appData和Net缓冲区被操纵时,关于线程安全性的问题没有太多的信息。每SSLEngine
文档,
“有两个并发问题需要注意的:
的wrap()
和unwrap()
方法可以互相并发执行SSL/TLS
协议使用有序分组应用程序必须。请注意确保生成的数据包按顺序传送,如果数据包无序到达,可能会发生意外或致命结果。“
这是否适用于阻塞和非阻塞?有人可以解释。谢谢。
此外,建立初始缓冲区大小的一般建议似乎基于(session.getApplicationBufferSize()/getPacketBufferSize()
),这些值将如何设置?这些更好用来代替32k
左右的标准缓冲区大小吗?
谢谢@EJP。像往常一样,你对这个话题的评论是非常有帮助的。你可以请。详细说明了上面提到的可能的并发问题,正如通常我没有看到的那样,这些问题被明确处理: “wrap()和unwrap()方法可能彼此并发执行 SSL/TLS协议使用有序的数据包。必须注意确保生成的数据包按顺序发送,如果数据包无序到达,可能会发生意外或致命结果。“这应该在客户端实例化SSLEngine中明确处理? –
'可以同时执行'意味着*你*可以同时执行它们。如果您只使用一个线程,这是NIO的全部要点,那么不需要处理任何数据包序列问题。 – EJP
Final澄清请(希望),再次来自SSLEngine文档:“通过从I/O传输机制中分离SSL/TLS抽象,SSLEngine可用于各种I/O类型,例如非阻塞I/O(轮询),可选择的非阻塞I/O,Socket和传统的Input/OutputStreams,本地ByteBuffers或者字节数组..“这是否意味着SSLEngine可以用于NIO以外的传输,也就是常规套接字? Was SSLSocket被用于SSL,使用基于常规套接字的阻塞IO和用于NIO的SSLEngine(阻塞IO) –