MQTTnet客户端无法连接服务器证书 [英] MQTTnet client can't connect server certificate

查看:490
本文介绍了MQTTnet客户端无法连接服务器证书的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用MQTTnet库连接到需要服务器证书的MQTT服务器.不需要客户端.

我已经像在其他帖子中找到的那样将证书安装在PC内,并创建了.pfx文件来创建证书,但是该程序没有给我任何错误..它根本没有连接到该主题./p>

这是我的示例代码

 //创建一个新的MQTT客户端var factory = new MqttFactory();var mqttClient = factory.CreateMqttClient();var caCert = new X509Certificate(@"C:\ caserverroot.pfx","mypsw");var url ="mymqtt.com";var username ="user";var psw =用户";var port = 8885;var options = new MqttClientOptionsBuilder().WithClientId(Guid.NewGuid().ToString()).WithTcpServer(URL,端口).WithCredentials(用户名,psw).WithTls(新的MqttClientOptionsBuilderTlsParameters(){AllowUntrustedCertificates = true,UseTls = true,证书=新的List< byte []>{new X509Certificate2(caCert).Export(X509ContentType.Cert)},CertificateValidationCallback =委托{return true;},IgnoreCertificateChainErrors =否,IgnoreCertificateRevocationErrors =假}).WithCleanSession().WithProtocolVersion(MQTTnet.Serializer.MqttProtocolVersion.V311).建造();//连接var result = await mqttClient.ConnectAsync(options); 

//订阅主题

  mqttClient.Connected + =异步(s,e)=>{Console.WriteLine("###与服务器###"连接);等待mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("/mytopic").Build());Console.WriteLine("### SUBSCRIBED ###");}; 

我在这里找到的所有其他事件: https://github.com/chkr1011/MQTTnet/wiki/Client

你们中有人有关于这个图书馆的经验吗?如何调试它并找到错误?

谢谢

解决方案

所以,我不知道为什么我错了,但是使用ManagedMqttClient可以保存我的情况.

这是一个像超级按钮一样工作的代码

 //创建一个新的MQTT客户端var mqttClient = new MqttFactory().CreateManagedMqttClient();var caCert = new X509Certificate(@"C:\ cert.pfx","psw");var url ="myurl.com";var username ="user";var psw =用户";var port = 8885;var options = new ManagedMqttClientOptionsBuilder().WithAutoReconnectDelay(TimeSpan.FromSeconds(30)).WithClientOptions(新的MqttClientOptionsBuilder().WithClientId(Guid.NewGuid().ToString()).WithTcpServer(URL,端口).WithCredentials(用户名,psw).WithTls(新的MqttClientOptionsBuilderTlsParameters(){AllowUntrustedCertificates = false,UseTls = true,证书=新的List< byte []>{new X509Certificate2(caCert).Export(X509ContentType.Cert)},CertificateValidationCallback =委托{return true;},IgnoreCertificateChainErrors =否,IgnoreCertificateRevocationErrors =假}).WithCleanSession().WithProtocolVersion(MQTTnet.Serializer.MqttProtocolVersion.V311).建造()).建造();//连接等待mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("$ share:mygroup:/mytopic").Build());等待mqttClient.StartAsync(options); 

I'm using MQTTnet library to connect to my MQTT server that needs a server certificate. The client one is not needed.

I already installed the certificate inside my PC as i found in other post and created the .pfx file to create the certificate but the program doesn't give me any error..it simply doesn't connect to the topic.

This is my example code

        //Create a new MQTT client
        var factory = new MqttFactory();
        var mqttClient = factory.CreateMqttClient();

        var caCert = new X509Certificate(@"C:\caserverroot.pfx", "mypsw");
        var url = "mymqtt.com";
        var username = "user";
        var psw = "user";
        var port = 8885;

        var options = new MqttClientOptionsBuilder()
            .WithClientId(Guid.NewGuid().ToString())
            .WithTcpServer(url, port)
            .WithCredentials(username, psw)
            .WithTls(new MqttClientOptionsBuilderTlsParameters()
            {
                AllowUntrustedCertificates = true,
                UseTls = true,
                Certificates = new List<byte[]> { new X509Certificate2(caCert).Export(X509ContentType.Cert) },
                CertificateValidationCallback = delegate { return true; },
                IgnoreCertificateChainErrors = false,
                IgnoreCertificateRevocationErrors = false
            })
            .WithCleanSession()
            .WithProtocolVersion(MQTTnet.Serializer.MqttProtocolVersion.V311)
            .Build();

        // Connecting
        var result = await mqttClient.ConnectAsync(options);

// Subscribe to a topic

        mqttClient.Connected += async (s, e) =>
        {
            Console.WriteLine("### CONNECTED WITH SERVER ###");

            await mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("/mytopic").Build());

            Console.WriteLine("### SUBSCRIBED ###");
        };

With all the orther events that i found here: https://github.com/chkr1011/MQTTnet/wiki/Client

Any of you had experience about this library? How to debug it and find the error?

Thanks

解决方案

So, I don't know why i was wrong but using the ManagedMqttClient saved my situation.

This is the code that works like a charm

 //Create a new MQTT client
            var mqttClient = new MqttFactory().CreateManagedMqttClient();

            var caCert = new X509Certificate(@"C:\cert.pfx", "psw");
            var url = "myurl.com";
            var username = "user";
            var psw = "user";
            var port = 8885;

            var options = new ManagedMqttClientOptionsBuilder()
                .WithAutoReconnectDelay(TimeSpan.FromSeconds(30))
                .WithClientOptions(new MqttClientOptionsBuilder()
                    .WithClientId(Guid.NewGuid().ToString())
                    .WithTcpServer(url, port)
                    .WithCredentials(username, psw)
                    .WithTls(new MqttClientOptionsBuilderTlsParameters()
                    {
                        AllowUntrustedCertificates = false,
                        UseTls = true,
                        Certificates = new List<byte[]> { new X509Certificate2(caCert).Export(X509ContentType.Cert) },
                        CertificateValidationCallback = delegate { return true; },
                        IgnoreCertificateChainErrors = false,
                        IgnoreCertificateRevocationErrors = false
                    })
                    .WithCleanSession()
                    .WithProtocolVersion(MQTTnet.Serializer.MqttProtocolVersion.V311)
                    .Build())
                .Build();


            // Connecting
            await mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("$share:mygroup:/mytopic").Build());
            await mqttClient.StartAsync(options);

这篇关于MQTTnet客户端无法连接服务器证书的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆