【问题标题】:MQTTnet client can't connect server certificateMQTTnet 客户端无法连接服务器证书
【发布时间】:2019-04-08 13:53:13
【问题描述】:

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

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

这是我的示例代码

        //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);

//订阅一个主题

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

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

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

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

你们中有人对这个图书馆有过经验吗?如何调试并发现错误?

谢谢

【问题讨论】:

    标签: c# certificate client mqtt


    【解决方案1】:

    所以,我不知道为什么我错了,但使用 ManagedMqttClient 挽救了我的情况。

    这是一个像魅力一样工作的代码

     //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);
    

    【讨论】:

    • 添加证书时出现类型不匹配错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2020-06-26
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多