Authentification problem while connecting to AWS IOT

168 Views Asked by At

Trying to connect to Amazon IOT server. Got error:

MQTTnet.Adapter.MqttConnectingFailedException: 'Error while authenticating. Connection closed.'

What might be wrong?

using System;
using MQTTnet;
using Oocx.ReadX509CertificateFromPem;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Client;

namespace MQTT_IOT
{
    class Program
    {


            private static string certificateAuthorityCertPEMString;
            private static string deviceCertPEMString;
            private static string devicePrivateCertPEMString;
            private static String curDir = @"C:\c#test\mqtt_net\";


        static async Task Main(string[] args)
            {



                // Create a new MQTT client.
                var factory = new MqttFactory();
                var mqttClient = factory.CreateMqttClient();
                var broker = @"xxx-ats.iot.eu-central-1.amazonaws.com";
                 var port = 8883;

                deviceCertPEMString = File.ReadAllText(curDir+ @"client_cert.pem");
                devicePrivateCertPEMString = File.ReadAllText(curDir+ @"client_private_key.pem");
                certificateAuthorityCertPEMString = File.ReadAllText(curDir+ @"ca_cert.pem");

                //Converting from PEM to X509 certs in C# is hard
                //Load the CA certificate

                var certBytes = Encoding.UTF8.GetBytes(certificateAuthorityCertPEMString);
                var signingcert = new X509Certificate2(certBytes);

                //Load the device certificate
                //Use Oocx.ReadX509CertificateFromPem to load cert from pem
                var reader = new CertificateFromPemReader();
                X509Certificate2 deviceCertificate = reader.LoadCertificateWithPrivateKeyFromStrings(deviceCertPEMString, devicePrivateCertPEMString);

                

                // Certificate based authentication
                List<X509Certificate> certs = new List<X509Certificate>
            {
                signingcert,
                deviceCertificate
            };


                MqttClientOptionsBuilderTlsParameters tlsOptions = new MqttClientOptionsBuilderTlsParameters();
                tlsOptions.Certificates = certs;
                tlsOptions.SslProtocol = System.Security.Authentication.SslProtocols.Tls12;
                tlsOptions.UseTls = true;
                tlsOptions.AllowUntrustedCertificates = true;


                var options = new MqttClientOptionsBuilder()
                    .WithTcpServer(broker, port)
                    .WithClientId("dev1")
                    .WithTls(tlsOptions)
                    .Build();

                await mqttClient.ConnectAsync(options, CancellationToken.None);

                var message = new MqttApplicationMessageBuilder()
                    .WithTopic("test")
                    .WithPayload("Hello World")
                    .Build();

                await mqttClient.PublishAsync(message, CancellationToken.None);

            }
        }

        

    }
0

There are 0 best solutions below