2017-12-13 45 views
0

MQTTプロトコルで新しくなった。私がMQTTサーバーを検索したとき、私はMosquittoブローカーがもっとも使用されているブローカーの1つであることを発見しました。私はC#/ .NET上でMQTTクライアントを開発しなければならず、M2MqttプロジェクトとこのC# MQTT client exampleしか見つかりませんでした。M2Mqtt.MqttClientをTLSのMosquittoブローカーに接続するとAuthenticationExceptionが発生する

私はinstall Mosquitto broker on Windows 10change 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:リモート証明書が検証手順に従って無効です。

何か不足していますか?

答えて

1

この作業を管理できます。 ca.crtを使用する代わりに、証明書をca.pfxにエクスポートし、クライアントコンピュータの信頼されたルート証明機関のキャッシュに.pfx証明書をインストールしました。

インストールするには、ファイルを右クリックし、[ローカルマシン]を選択し、必要に応じてプロンプトを完了します。ローカルマシンを選択し、適切な証明書ストア(「信頼されたルート証明機関」)を選択することが重要です。

+0

.cft証明書を.pfxにエクスポートするにはどうすればよいですか。 – Jon

+0

@Jonローカル証明書に最初にインストールし、右クリックして>すべてのタスク>エクスポートを右クリックし、手順に従い、尋ねられたら.pfxを選択します – Mason

関連する問題