UWP StreamSocket不接收TLS警报(21)数据

时间:2019-06-21 19:23:55

标签: c# networking uwp wireshark tls1.2

我正在尝试编写一个UWP应用,该应用通过HTTPS使用MQTT与服务器通信。我使用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

1 个答案:

答案 0 :(得分:0)

问题似乎与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);

谢谢

艾米·彭