C# MQTTnet客户端无法连接服务器证书
我正在使用MQTTnet库连接到需要服务器证书的MQTT服务器。不需要客户端 我已经在我的电脑中安装了证书,正如我在其他帖子中发现的那样,并创建了.pfx文件来创建证书,但程序没有给我任何错误。它根本没有连接到主题 这是我的示例代码C# MQTTnet客户端无法连接服务器证书,c#,certificate,client,mqtt,C#,Certificate,Client,Mqtt,我正在使用MQTTnet库连接到需要服务器证书的MQTT服务器。不需要客户端 我已经在我的电脑中安装了证书,正如我在其他帖子中发现的那样,并创建了.pfx文件来创建证书,但程序没有给我任何错误。它根本没有连接到主题 这是我的示例代码 //Create a new MQTT client var factory = new MqttFactory(); var mqttClient = factory.CreateMqttClient();
//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);
我在这里发现的其他事件:
你们中有谁对这个图书馆有经验吗?如何调试它并找到错误
谢谢所以,我不知道为什么我错了,但使用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);
添加证书时出现类型不匹配错误。
//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);