MQTTプロトコルで新しくなった。私がMQTTサーバーを検索したとき、私はMosquittoブローカーがもっとも使用されているブローカーの1つであることを発見しました。私はC#/ .NET上でMQTTクライアントを開発しなければならず、M2MqttプロジェクトとこのC# MQTT client exampleしか見つかりませんでした。M2Mqtt.MqttClientをTLSのMosquittoブローカーに接続するとAuthenticationExceptionが発生する
私は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(私は証明書を2回作りました)。リンクで説明したように、私は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
:リモート証明書が検証手順に従って無効です。
何か不足していますか?
.cft証明書を.pfxにエクスポートするにはどうすればよいですか。 – Jon
@Jonローカル証明書に最初にインストールし、右クリックして>すべてのタスク>エクスポートを右クリックし、手順に従い、尋ねられたら.pfxを選択します – Mason