【发布时间】:2022-08-23 00:47:32
【问题描述】:
我正在尝试使用 MQTTnet 创建 TLS 1.2 加密的代理和客户端(假设在端口 2000 上)。以下是我的尝试:
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Server;
using System.Security.Authentication;
MqttFactory factory = new MqttFactory();
MqttServerOptionsBuilder serverOptions = new MqttServerOptionsBuilder()
.WithEncryptedEndpoint()
.WithEncryptedEndpointPort(2000)
.WithEncryptionSslProtocol(SslProtocols.Tls12)
.WithoutDefaultEndpoint();
MqttServer mqttServer = factory.CreateMqttServer(serverOptions.Build());
mqttServer.StartAsync();
MqttClientOptionsBuilder clientOptions = new MqttClientOptionsBuilder()
.WithClientId(\"myClient\")
.WithTcpServer(\"localhost\", 2000)
.WithTls(new MqttClientOptionsBuilderTlsParameters()
{
UseTls = true,
SslProtocol = SslProtocols.Tls12,
CertificateValidationHandler = x => { return true; }
});
MQTTnet.Client.MqttClient mqttClient = factory.CreateMqttClient() as MQTTnet.Client.MqttClient;
while (!mqttClient.IsConnected)
{
mqttClient.ConnectAsync(clientOptions.Build()).GetAwaiter();
Thread.Sleep(1000);
}
Console.WriteLine(\"Connected\");
Console.ReadLine();
我创建的客户端没有连接到代理。我相信问题来自服务器端(如果不是两者),因为当我检查 netstat 时,端口 2000 上没有任何连接。
我错过了什么?
-
在尝试连接客户端之前,您无需等待服务器启动。尝试在
mqttServer.StartAsync();之前添加await -
试过了,它抛出一个异常并说“未设置 TLS 证书”。在使用有效的
X509Certificate2添加.WithEncryptionCertificate()后工作。非常感谢! -
请添加正确详细信息的答案。