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

C# 无法在MqttNet托管客户端中添加客户端证书,c#,mqtt,C#,Mqtt,我正在使用库连接应用程序中提供的Mqtt服务器。 我正在使用来自的托管mqttnet客户端 遇到一个小问题,我无法向客户端添加证书。它给了我类型不匹配的错误 这是我的密码 var URL = MqttConfiguration.MqttBrokerAddress; var username = MqttConfiguration.MqttClientUserName; var password = MqttConfiguration.MqttClientPass

我正在使用库连接应用程序中提供的Mqtt服务器。 我正在使用来自的托管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);
var URL=MqttConfiguration.MqttBrokerAddress;
var username=MqttConfiguration.MqttClientUserName;
var password=MqttConfiguration.MqttClientPassword;
var SSLport=MqttConfiguration.SSLport;
var options=new ManagedMqttClientOptionsBuilder()
.具有自动重新连接延迟(时间跨度从秒(30))
.WithClientOptions(新的MQTTClientOptions生成器()
.WithClientId(Guid.NewGuid().ToString())
.WithTcpServer(URL,SSLport)
.WithCredentials(用户名、密码)
//.WithTls(GetMqttClientOptions())
.WithTls(新MQTTClientOptions BuilderTLParameters())
{
AllowUntrustedCertificates=false,
UseTls=true,
证书=新列表{new X509Certificate2(caCert).Export(X509ContentType.Cert)},
CertificateValidationCallback=委托{return true;},
IgnoreCertificateChaineErrors=假,
IgnoreCertificateReservationErrors=false
})
.WithCleansion()
.WithProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V311)
.Build())
.Build();
等待mqttClient.SubscribeAsync(新的TopicFilterBuilder().WithTopic(Topics.handshake.Build());
等待mqttClient.StartAsync(选项);
我在这条线上遇到了错误

Certificates = new List<byte[]> { new X509Certificate2(caCert).Export(X509ContentType.Cert) },
Certificates=new List{new X509Certificate2(caCert).Export(X509ContentType.Cert)},
错误消息


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

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

Certificates = new List<X509Certificate> { new X509Certificate2(caCert) }
Certificates=新列表{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; }
}
公共类MqttClientOptionsBuilderTlsParameters
{
公共bool UseTls{get;set;}
公共函数CertificateValidationCallback
{
得到;
设置
}
公共SslProtocols SslProtocol{get;set;}=SslProtocols.Tls12;
公共IEnumerable证书{get;set;}
public bool AllowUntrustedCertificates{get;set;}
公共布尔IgnoreCertificateChaineErrors{get;set;}
public bool IgnoreCertificateRecipationErrors{get;set;}
}

证书是清晰的,IEnumerable of IEnumerable of byte,您确定您的包是正确的/最新的吗?我可以完全离开这里:我明白了。这是因为我正在使用新的软件包,并从使用旧软件包的答案中获得帮助。