SunJSSE中的TLS扩展最大片段长度协商

时间:2018-05-22 07:14:24

标签: java tls1.2 jsse

我目前正在使用 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字节。

我的问题是:

  1. 我的配置对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);
    
  2. 服务器Hello中不包含Maximum Fragment Length Negotiation扩展(请查看上图),但TLS记录是否已碎片化,是否接受此行为?

  3. SunJSSE的当前实现(JDK v10.0.1)是否存在碎片错误?我检查了OpenJDK source code,它的系统属性为 jsse.enableMFLExtension ,而不是{strong> jsse.enableMFL N 扩展,在{中定义{3}}

  4. 提前感谢任何指导和意见。

0 个答案:

没有答案