Невозможно добавить сертификат клиента в Mqt tNet Managed Client - PullRequest
2 голосов
/ 22 января 2020

Я использую Mqt tNet Библиотека для подключения к предоставленному серверу Mqtt в моем приложении. Я использую управляемый клиент mqt tnet из здесь

, получая небольшую проблему, я не могу добавить сертификат с клиентом. это дает мне ошибку несоответствия типов.

это мой код.

 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

Я застрял здесь два дня. нужна помощь.

1 Ответ

2 голосов
/ 22 января 2020

Кажется, что функция Export преобразует ваш сертификат в байт [], где Certificates представляет собой IEnumerable из X509Certificate

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 of byte, вы уверены, что ваш пакет правильный / актуальный? Я мог бы быть полностью отсюда: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...