UWP StreamSocket не получает данные TLS Alert (21) - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь написать приложение UWP, которое связывается с сервером, используя MQTT через HTTPS. Я использую 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

1 Ответ

0 голосов
/ 03 июля 2019

Похоже, проблема связана с 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);

Спасибо

Эми Пэн

...