c# - 无法在 MqttNet 托管客户端中添加客户端证书

标签 c# mqtt

我正在使用 MqttNet在我的应用程序中与提供的 Mqtt 服务器连接的库。
我正在使用来自 here 的托管 mqttnet 客户端

遇到一个小问题我无法向客户端添加证书。它给了我类型不匹配的错误。

这是我的代码。

 var URL = MqttConfiguration.MqttBrokerAddress;
        var username = MqttConfiguration.MqttClientUserName;
        var password = MqttConfiguration.MqttClientPassword;
        var SSLport = MqttConfiguration.SSLPort;

        var options = new ManagedMqttClientOptionsBuilder()
            .WithAutoReconnectDelay(TimeSpan.FromSeconds(30))
            .WithClientOptions(new MqttClientOptionsBuilder()
                .WithClientId(Guid.NewGuid().ToString())
                .WithTcpServer(URL, SSLport)
                .WithCredentials(username, password)
                //.WithTls( GetMqttClientOptions())
                .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.Formatter.MqttProtocolVersion.V311)
                .Build())
            .Build();


        await mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic(Topics.handshake).Build());

        await mqttClient.StartAsync(options);

我在这条线上收到错误
Certificates = new List<byte[]> { new X509Certificate2(caCert).Export(X509ContentType.Cert) },

错误信息

enter image description here

我被困在这里两天了。需要帮忙。

最佳答案

导出功能似乎将您的证书转换为 byte[],其中 Certificates 是 X509Certificate 的 IEnumerable

Certificates = new List<X509Certificate> { new X509Certificate2(caCert) }

应该可以解决问题,这很奇怪,因为查看源代码:
public class MqttClientOptionsBuilderTlsParameters
{
    public bool UseTls { get; set; }

    public Func<X509Certificate, X509Chain, SslPolicyErrors, IMqttClientOptions, bool> CertificateValidationCallback
    {
        get;
        set;
    }

    public SslProtocols SslProtocol { get; set; } = SslProtocols.Tls12;

    public IEnumerable<IEnumerable<byte>> Certificates { get; set; }

    public bool AllowUntrustedCertificates { get; set; }

    public bool IgnoreCertificateChainErrors { get; set; }

    public bool IgnoreCertificateRevocationErrors { get; set; }
}

证书显然是字节的 IEnumerable 和 IEnumerable,你确定你的包是正确的/最新的吗?我可以完全离开这里 :D

关于c# - 无法在 MqttNet 托管客户端中添加客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59859216/

相关文章:

ios xcode9.0 swift4.0 MQTT - 如何使用证书连接到MQTT服务器?

c# - JetBrains Rider 中未命中断点?

c# - c# 中的常量和只读?

c# - 如何: Social Media Website

mqtt - 通过 umqtt 将 ESP32 连接到 AWS IoT

c++ - 无法在 Mosquitto MQTT Broker 插件中访问 struct mosquitto 的元素

ios - iOS 推送通知的 MQTT 服务

c# - 我应该如何在不实例化不必要地缓存的对象的情况下填充 MemoryCache?

c# - MonoTouch 中的第 3 方库?

tcp - MQTT 与 TCP/IP 相比有哪些优势?既然 MQTT 是基于 TCP 的,那我们为什么不用 TCP/IP 来代替呢?