我是MQTT协议的新手。当我搜索MQTT服务器时,我发现Mosquitto代理是最常用的代理之一,因此我开始使用它。我必须在C#/ .NET上开发一个MQTT客户端,我只发现了M2Mqtt项目和C# MQTT client example。
我设法install Mosquitto broker on Windows 10和change the access control list using topics。使用MqttClient
我可以使用用户名连接到代理,订阅主题并使用以下代码发布它们。
连接:
byte result = this.mqttClient.Connect(Guid.NewGuid().ToString(), username, string.Empty);
订阅:
this.mqttClient.Subscribe(new string[] { topic }, new byte[] { 2 });
发布:
ushort result = this.mqttClient.Publish(topic, message, MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, true);
现在我想在通信中添加安全性。我按照这些steps to create the CA certificate, the server key and server certificate(我创建了两次证书)。我更改了mosquito.conf
文件,如链接中所述:
port 8883
cafile C:\mosquitto\certs\ca.crt
certfile C:\mosquitto\certs\server.crt
keyfile C:\mosquitto\certs\server.key
我不知道是否有必要,但我在these steps之后将ca.crt
添加到受信任的根证书。
我更改了客户端以在连接中使用CA证书:
//this.mqttClient = new MqttClient(brokerAddress);
X509Certificate caCertificate = new X509Certificate("ca.crt");
this.mqttClient = new MqttClient(brokerAddress, 8883, true, caCertificate, null, MqttSslProtocols.TLSv1_0);
ca.crt
文件的副本位于.exe
文件的同一文件夹中。当我运行应用程序时,我总是得到相同的异常:
uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException
:连接到经纪人的例外System.Security.Authentication.AuthenticationException
:根据验证程序,远程证书无效。你知道我错过了什么吗?
答案 0 :(得分:2)
设法让这个工作。 我没有使用ca.crt将证书导出到ca.pfx,而是在客户端计算机的受信任的根证书颁发机构缓存中安装了.pfx证书。
要安装,只需右键单击该文件,选择“本地计算机”,然后根据需要完成提示。选择本地计算机并选择正确的证书存储区("受信任的根证书颁发机构")至关重要。