有一些有用的信息可以帮助实现使用Java的NIO(SocketChannel和SSLEngine)
的SSL
,而不是使用netty等框架。
我正在尝试设计一个SSL
实现,它可以与阻塞/非阻塞通道一起工作,并且遇到了一些基本问题。
关于线程安全性的问题,当操作appData和Net缓冲区时,没有太多信息需要处理。根据SSLEngine
的文档:
"有两个并发问题需要注意:
wrap()
和unwrap()
方法可能同时执行。
SSL/TLS
协议使用有序数据包。应用程序必须注意确保生成的数据包按顺序传递。如果数据包乱序,可能会导致意外或致命的结果。"
这对阻塞和非阻塞都适用吗?能否有人解释一下?谢谢。
此外,设置初始缓冲区大小的一般建议似乎基于(session.getApplicationBufferSize()/getPacketBufferSize()
),如何设置这些值?这些是否比使用标准缓冲区大小(例如32k
)更好?
SSLEngine
和普通的Sockets
, 但有些困难。不过这么做没有多大意义。在我看来SSLEngine
的设计有点牵强附会。他们本应该提供一个SSLSocketChannel
, 或者两者都提供。大部分不能这么做的原因都站不住脚。 - user207421