![](/img/trans.png)
[英]MQTT Timeout when trying to connect to TLS enabled broker in unity3d
[英]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.