2017-12-13 86 views
0

MQTT 프로토콜이 새로 도입되었습니다. MQTT 서버를 검색했을 때 Mosquitto 브로커가 가장 많이 사용 된 브로커 중 하나이므로 브로커를 사용하기 시작했습니다. 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 (인증서를 두 번 만들었습니다)을 따랐습니다. 나는 링크에 설명 된대로 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을 추가했습니다.

//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 파일의 동일한 폴더에 있습니다

나는 연결에서 CA 인증서를 사용하도록 클라이언트를 변경했습니다. 나는 응용 프로그램을 실행할 때 나는 항상 같은 예외를 얻을 :

  • uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException을 : 예외가 브로커에 연결
  • [내부 예외] System.Security.Authentication.AuthenticationException : 원격 인증서가 검증 절차에 따라 유효하지 않습니다.

내가 누락 된 부분을 알고 계십니까?

답변

1

이 작업을 관리했습니다. ca.crt를 사용하는 대신 인증서를 ca.pfx로 내 보낸 다음 클라이언트 컴퓨터의 신뢰할 수있는 루트 인증 기관 캐시에 .pfx 인증서를 설치했습니다.

설치하려면 파일을 마우스 오른쪽 단추로 클릭하고 로컬 컴퓨터를 선택한 다음 필요에 따라 메시지를 완료하기 만하면됩니다. 로컬 컴퓨터를 선택하고 적절한 인증서 저장소 ("신뢰할 수있는 루트 인증 기관")를 선택하는 것이 중요합니다.

+0

그리고 어떻게 .crt 인증서를 .pfx로 내 보냅니 까? – Jon

+0

@Jon 먼저 인증서를 로컬 인증서에 설치 한 다음> 모든 작업> 내보내기를 마우스 오른쪽 버튼으로 클릭하고 단계를 따르고 요청시 .pfx를 선택하십시오. – Mason