MQTTnet v3.0.5 TLS/SSL连接报错:证书类型转换失败求助
MQTTnet TLS/SSL连接证书类型转换错误解决
问题场景
使用MQTTnet v3.0.5版本配置TLS连接时,配置MqttClientOptionsBuilderTlsParameters的Certificates属性出现编译错误:
无法将类型'System.Collections.Generic.List<System.Security.Cryptography.X509Certificates.X509Certificate>'隐式转换为'System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable
>'。存在显式转换(是否缺少强制转换?)
错误代码示例:
var caCert = X509Certificate.CreateFromCertFile(@"certificate.crt"); var clientCert = new X509Certificate2(@"certificate.pfx", "12345678"); var tlsOptions = new MqttClientOptionsBuilderTlsParameters { UseTls = true, Certificates = new List<X509Certificate> { caCert, clientCert }, IgnoreCertificateRevocationErrors = true, IgnoreCertificateChainErrors = true, AllowUntrustedCertificates = true, SslProtocol = System.Security.Authentication.SslProtocols.Tls12 };
问题原因
MQTTnet v3.0.5版本中,MqttClientOptionsBuilderTlsParameters.Certificates属性的类型为IEnumerable<IEnumerable<byte>>,要求传入证书的字节数组集合,而非直接传入X509Certificate对象列表。
解决方案
方案1:升级MQTTnet版本
将MQTTnet升级至v3.1.1及以上的v3分支版本,该版本已调整Certificates属性的类型,支持直接传入X509Certificate或X509Certificate2对象列表,原代码可直接正常运行,此方案适用于多数v3分支应用。
方案2:旧版本临时适配(不推荐)
若无法升级版本,可将证书转换为字节数组集合传入:
var caCert = X509Certificate.CreateFromCertFile(@"certificate.crt"); var clientCert = new X509Certificate2(@"certificate.pfx", "12345678"); var tlsOptions = new MqttClientOptionsBuilderTlsParameters { UseTls = true, Certificates = new List<IEnumerable<byte>> { caCert.Export(X509ContentType.Cert), clientCert.Export(X509ContentType.Pfx, "12345678") }, IgnoreCertificateRevocationErrors = true, IgnoreCertificateChainErrors = true, AllowUntrustedCertificates = true, SslProtocol = System.Security.Authentication.SslProtocols.Tls12 };
内容的提问来源于stack exchange,提问作者Trang Phan
相关产品推荐
相关产品推荐

