【问题标题】:UWP StreamSocket not receiving TLS Alert (21) dataUWP StreamSocket 未接收 TLS 警报 (21) 数据
【发布时间】:2019-06-21 19:23:55
【问题描述】:

我正在尝试编写一个通过 HTTPS 使用 MQTT 与服务器通信的 UWP 应用。我使用 StreamSocket 通过线路发送整个 MQTT 数据包,但我无法从服务器获得任何响应。如果我尝试重新发送数据包,服务器将终止连接。使用 Wireshark,我可以看到服务器响应了一条消息 Content-Type: Alert (21),其中包含 26 个字节的数据,但我无法通过 StreamSocket.InputStream 读取它

var streamSocket = new StreamSocket();
Buffer packet;

// Building Mqtt packet.

await streamSocket.ConnectAsync(new HostName("server.com"), "443", SocketProtectionLevel.Tls12);
await streamSocket.OutputStream.WriteAsync(packet);

await Task.Delay(2000);  // Give the server some time to respond
var inputBytes = new byte[2048];
var completion = await streamSocket.InputStream.ReadAsync(inputBytes.AsBuffer(),(uint) inputBytes.Length, InputStreamOptions.Partial);

// inputBytes still empty

我希望能够读取服务器响应的字节数。我认为有一种方法可以访问这些字节,但我在任何地方都找不到。

更新:添加了 Wireshark 结果

Wireshark result

【问题讨论】:

  • 请查看Creating secure socket connections当接收到传入通信时,您不能将 SSL/TLS 与由 StreamSocketListener 创建的 StreamSocket 一起使用,因为作为服务器的 SSL/TLS 协商不是由 StreamSocket 类实现的
  • @NicoZhu-MSFT 我的错,我没有复制我的代码,所以我在这里犯了一个小错误。为了澄清我没有使用 StreamSocketListener。我只是在延时后读取了套接字。我什至将读取命令置于延迟 2 秒的无限循环中,但仍然一无所获。请查看我刚刚附上的 Wireshark 结果的屏幕截图。

标签: c# networking uwp wireshark tls1.2


【解决方案1】:

问题似乎与HTTPS有关。您是否尝试过使用UpgradeToSslAsync 方法,如果在发送和接收一些初始数据后需要您的 SSL/TLS 连接,请使用UpgradeToSslAsync 方法升级连接以使用 SSL,如下所示:

await streamSocket.ConnectAsync(new HostName("server.com"), "443", Windows.Networking.Sockets.SocketProtectionLevel.PlainSocket);
await streamSocket.UpgradeToSslAsync(Windows.Networking.Sockets.SocketProtectionLevel.Tls12, hostName);

谢谢,

彭于晏

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多