You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows正常Mac异常:DTLS客户端未处理Server Finished问题排查

DTLS客户端在Mac上重复发送握手包,提示未收到ServerHelloDone但实际已处理

基于OpenJDK的DTLSOverDatagram实现了DTLS客户端/服务端,Windows虚拟机上的握手单元测试可正常运行,但Mac本地运行时出现异常:

  • 服务器已完成握手流程
  • 客户端却持续重复发送握手包
  • javax.net.ssl日志显示客户端提示“未收到ServerHelloDone消息”,但实际上客户端代码已经处理了该消息

相关SSL日志

# 客户端日志片段
...
DEBUG: TLS handshake received: ServerHelloDone
DEBUG: Processing ServerHelloDone message
...
DEBUG: TLS handshake failed: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
DEBUG: Fatal alert received: handshake_failure
...
# 服务器日志片段
...
DEBUG: TLS handshake finished: SSL negotiation completed successfully
...

关键代码片段

握手处理逻辑

// 客户端握手处理部分
private void processHandshakeMessage(DatagramPacket packet) throws IOException {
    SSLHandshake handshake = sslEngine.getHandshakeStatus();
    if (handshake == SSLHandshakeStatus.NEED_UNWRAP) {
        ByteBuffer input = ByteBuffer.wrap(packet.getData(), 0, packet.getLength());
        sslEngine.unwrap(input, applicationBuffer);
        SSLHandshakeStatus newStatus = sslEngine.getHandshakeStatus();
        if (newStatus == SSLHandshakeStatus.FINISHED) {
            // 标记握手完成
            handshakeCompleted = true;
            System.out.println("Handshake completed locally");
        } else if (newStatus == SSLHandshakeStatus.NEED_WRAP) {
            generateHandshakePacket();
        }
    }
}

生成握手包逻辑

private void generateHandshakePacket() throws IOException {
    ByteBuffer output = ByteBuffer.allocate(sslEngine.getSession().getPacketBufferSize());
    SSLEngineResult result = sslEngine.wrap(ByteBuffer.allocate(0), output);
    output.flip();
    byte[] data = new byte[output.remaining()];
    output.get(data);
    DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, serverPort);
    datagramSocket.send(packet);
    System.out.println("Sent handshake packet, length: " + data.length);
}

内容的提问来源于stack exchange,提问作者omri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:02:35