我目前正在使用 JDK10的SunJSSE 实现TLSv1.2服务器模拟器,以测试资源受限的客户端。客户端发送具有最大片段长度协商扩展的客户端Hello,以根据定义请求512字节的TLSPlaintext.fragment。 RFC 6066
请参阅此CR of OpenJDK项目11,我致电setMaximumPacketSize(517)
,了解客户端所需的最大片段长度 512 字节+ 5 字节服务器模拟器中的TLS记录头,但碎片的结果似乎是在握手消息而不是TLS记录上完成的。
以下是我的服务器模拟器发送的第一个TLS记录的Wireshark捕获日志:
TLS fragmented record by setting jsse.enableMFLNExtension = true and maximum packet size = 517
我可以看到服务器Hello消耗了74个字节,而服务器证书消耗了512个字节,这就是长度为586的原因。被测试的客户端使用Alert(record_overflow)中止了握手,因为它找到了length
&gt ;协商长度,即512字节。
我的问题是:
我的配置对MFLN是否正确?我的代码如下:
// enable Maximum Fragment Length Negotiation
System.setProperty("jsse.enableMFLNExtension", "true");
Socket serverSocket = srvSock.accept();
SSLParameters sslParams = ((SSLSocket) serverSocket).getSSLParameters();
int maxPacketSize = (int) 517;
sslParams.setMaximumPacketSize(maxPacketSize);
((SSLSocket) serverSocket).setSSLParameters(sslParams);
服务器Hello中不包含Maximum Fragment Length Negotiation扩展(请查看上图),但TLS记录是否已碎片化,是否接受此行为?
SunJSSE的当前实现(JDK v10.0.1)是否存在碎片错误?我检查了OpenJDK source code,它的系统属性为 jsse.enableMFLExtension ,而不是{strong> jsse.enableMFL N 扩展,在{中定义{3}}
提前感谢任何指导和意见。