Java 使用SSL+的线程安全性;尼奥
关于使用Java 使用SSL+的线程安全性;尼奥,java,sockets,ssl,nio,Java,Sockets,Ssl,Nio,关于使用NIO(SocketChannel和SSLEngine)实现SSL有一些有用的信息,使用java,而不是使用netty等框架 我正在尝试提出一个SSL实现,它可以与阻塞/非阻塞通道一起工作,并获得一些基本的qn 在操作appData和Net缓冲区时,没有太多关于线程安全问题的信息。根据SSLEngine的文档 “需要注意两个并发问题: wrap()和unwrap()方法可以彼此并行执行 SSL/TLS协议采用有序数据包。应用程序必须注意确保生成的数据包按顺序传递。如果数据包到达时顺序不正
NIO(SocketChannel和SSLEngine)
实现SSL
有一些有用的信息,使用java,而不是使用netty等框架
我正在尝试提出一个SSL
实现,它可以与阻塞/非阻塞通道一起工作,并获得一些基本的qn
在操作appData和Net缓冲区时,没有太多关于线程安全问题的信息。根据SSLEngine
的文档
“需要注意两个并发问题:
wrap()
和unwrap()
方法可以彼此并行执行
SSL/TLS
协议采用有序数据包。应用程序必须注意确保生成的数据包按顺序传递。如果数据包到达时顺序不正确,可能会出现意外或致命的结果。”
这是否适用于阻塞和非阻塞?有人能解释一下吗。谢谢
此外,设置初始缓冲区大小的一般建议似乎是基于(session.getApplicationBufferSize()/getPacketBufferSize()
),如何设置这些值?使用这些缓冲区是否比使用32k左右的标准缓冲区大小更好
您通常不会在多个线程中执行SSLEngine
操作,因此不应该出现问题。您只会在执行SSLEngine
任务时使用另一个线程,而这不会使用SSLEngine
这是否适用于阻塞和非阻塞
当然可以
设置初始缓冲区大小的一般建议似乎基于(session.getApplicationBufferSize()/getPacketBufferSize())
,如何设置这些值
将网络缓冲区大小设置为getPacketBufferSize()
,将应用程序缓冲区大小设置为getApplicationBufferSize()
使用这些缓冲区是否比使用32k左右的标准缓冲区大小更好
如果愿意,可以使用不同的缓冲区大小,但为什么?您可能会因为缓冲区太大而浪费空间,或者提供的缓冲区太小而无法使用
谢谢@EJP。像往常一样,你对这个话题的评论非常有帮助。你能帮我吗。详细说明所提到的可能的并发性问题,通常我看不到,这些问题是显式处理的:“wrap()和unwrap()方法可以彼此并行执行。SSL/TLS协议使用有序数据包。应用程序必须注意确保生成的数据包按顺序传递。如果数据包到达时顺序不正确,可能会出现意外或致命的结果。”如果在实例化SSLEngine的客户机中显式处理此问题,则“可以彼此并发执行”意味着您可以并发执行它们。如果您只使用一个线程,这是NIO的全部要点,那么就没有需要处理的数据包序列问题。最后,请再次澄清(希望)SSLEngine文档:“通过将SSL/TLS抽象与I/O传输机制分离,SSLEngine可以用于各种I/O类型,例如非阻塞I/O(轮询)、可选非阻塞I/O、套接字和传统的输入/输出流、本地字节缓冲区或字节数组……“这是否意味着SSLEngine可用于NIO以外的传输,即常规套接字?Wasnt SSLSocket用于SSL和基于常规套接字的阻塞IO,SSLEngine用于NIO(阻塞IO)@KrishnaMothukuri是的,您可以将SSLEngine
用于普通套接字,但有一些困难。不过没什么意义。对我来说,SSLEngine
设计有点逃避现实。他们可以提供一个SSLSocketChannel
,或者也可以。大多数不这样做的理由都站不住脚。