簡體   English   中英

使用TLS將M2Mqtt.MqttClient連接到Mosquitto代理時獲取AuthenticationException

[英]Getting AuthenticationException when connect M2Mqtt.MqttClient to Mosquitto broker with TLS

我是MQTT協議的新手。 當我搜索MQTT服務器時,我發現Mosquitto代理是最常用的代理之一,因此我開始使用它。 我必須在C#/。NET上開發一個MQTT客戶端,並且我僅找到M2Mqtt項目和此C#MQTT客戶端示例

我設法在Windows 10上安裝了Mosquitto代理,使用主題更改了訪問控制列表 使用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);

現在,我想在通信中增加安全性。 我按照以下步驟創建了CA證書,服務器密鑰和服務器證書 (我兩次創建了證書)。 我按照鏈接中的說明更改了mosquito.conf文件:

port 8883
cafile C:\mosquitto\certs\ca.crt
certfile C:\mosquitto\certs\server.crt
keyfile C:\mosquitto\certs\server.key

我不知道是否有必要,但是我按照以下步驟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 :根據驗證過程,遠程證書無效。

你知道我是否想念什么嗎?

設法使這個工作。 我沒有使用ca.crt,而是將證書導出到ca.pfx,而是在客戶端計算機的“受信任的根證書頒發機構”緩存中安裝了.pfx證書。

要安裝,只需右鍵單擊該文件,選擇“本地計算機”,然后根據需要完成提示。 選擇本地計算機並選擇適當的證書存儲區至關重要(“受信任的根證書頒發機構”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM