Я использую ядро do tnet для разработки приложения, которое будет отправлять сообщения в IoT Hub. Это приложение будет работать под Unix. Для этого я использовал аутентификацию сертификата X509, как описано в следующей ссылке:
https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-security-x509-get-started
Если я запускаю приложение с использованием Visual Studio 2019 в режиме отладки приложение работает отлично. С другой стороны, при работе под unix он всегда выдает «Ошибка аутентификации TLS». исключение.
Трассировка стека: "в Microsoft . Azure .Devices.Client.Transport.ErrorDelegatingHandler.ExecuteWithErrorHandlingAsync [T] (Func`1 asyncOperation) в Microsoft. Azure .Devices.Client.Transport.RetryDelegatingHandler. <> C___0playClay. d.MoveNext () --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в Microsoft. Azure .Devices.Client.Transport.RetryDelegatingHandler.EnsureOpenedAsyn c (CancellationToken cancellationToken) в Microsoft. Azure .Devices.Client.Transport.RetryDelegatingHandler. <> c__DisplayClass14_0. d.MoveNext () --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в Microsoft. Azure .Devices.Client.Transport.RetryDelegatingHandler.SendEventAsyn c (Сообщение сообщения, CancellationToken cancellationToken) в Venom , ) в C: \ SBNRepo \ Venom \ VenomIoT \ VenomIoTDevice.cs: строка 41 в Venom.IoT.VenomIoTDevice.Start (CancellationToken cancellationToken) в C: \ SBNRepo \ Venom \ VenomIoT \ VenomIoT 58.vice
Я захватил внутреннее исключение, и оно выглядит следующим образом: Внутреннее исключение: System.Security.Authentication.AuthenticationException - удаленный сертификат недействителен в соответствии с процедурой проверки.
Кажется, что сертификаты не совпадают ... b но почему они отменяют Windows?
Вот как я создаю свое устройство:
var cert = new X509Certificate2(certPath, certPwd);
var auth = new DeviceAuthenticationWithX509Certificate(deviceId, cert);
_deviceClient = DeviceClient.Create(iotHubUri, auth, TransportType.Mqtt);
и вот как я отправляю d2 c message:
var messageString = JsonConvert.SerializeObject(myMessage);
var message = new Message(Encoding.ASCII.GetBytes(messageString));
await _deviceClient.SendEventAsync(message, cancellationToken);
Последние пару дней я боролся с этим, действительно пытался выяснить это ... есть предложения? Они будут очень признательны.
Заранее спасибо!