AWS IoT Core에 ESP32보드로 MQTT SSL/TSL로 데이터를 업로드해서 C#윈폼에서 m2mqtt로 수신하는 방법!
프로그래밍/아마존AWS 2023. 5. 7. 20:30
이번시간에는 녹칸다와 함께 aws iot에 esp32가 업로드한 센서데이터를 C#윈폼에서 수신하는 방법에 대해서 알아보도록 하자!
ESP32로 MQTT SSL/TLS로 aws iot에 발행하는 방법은 아래 포스트를 참고하면 된다!
먼저 aws iot에서 디바이스를 등록하면 4가지 인증서를 다운받을 수 있다!
녹칸다는 아래와 같이 부르고 있다!
1.CA인증서
2.디바이스인증서
3.개인키
4.공개키
C#에서는 CA인증서와 디바이스인증서 2가지가 필요하다!
그런데 aws iot에서 다운받은 "디바이스인증키"가 C#에서는 사용이 안된다!(왜 안되는지는 녹칸다도 모름)
그래서 openssl이라는 툴로 디바이스 인증키를 변경해주어야한다!
지금부터 이 과정을 해보는 것이다!
새롭게 디바이스 인증키를 생성하기 위해서는 CA인증서, 디바이스 인증서, 개인키 3개가 필요하다!
(일단 기억만 해두자)
아래 링크를 눌러서 openssl 다운로드 페이지로 이동한다!
https://slproweb.com/products/Win32OpenSSL.html
하단에 가장 최신버전의 openssl의 exe파일을 다운로드 받는다!
next계속 눌러서 설치하면 된다!
제일 마지막에 도네이션할거냐고 물어보는데 확인 누르고 그냥 무시하면 된다!
(기본 경로에 설치할것)
이제 내 컴퓨터에서 명령프롬프트를 관리자권한으로 실행해야한다!
cmd라고 검색해서 "명령 프롬프트"에 마우스 오른쪽 버튼을 눌러서 관리자권한으로 실행한다!
그리고 윈도우 탐색기를 열어서 아래 경로로 이동한다!
"C:\Program Files\OpenSSL-Win64\bin"
위에서 언급한 CA인증서와 디바이스인증서 개인키를 여기다가 카피한다!
이렇게 해두면 환경변수 등록같은 불필요한 작업을 생략할 수 있다!
앞으로 입력해야할 몇가지 명령어가 있는데 녹칸다의 블로그는 복사가 안되어서 아래 파일로 첨부하니 열어서 복붙하면된다!
조금전에 열어둔 명령프롬프트에 아래와 같이 입력해준다!
cd C:\Program Files\OpenSSL-Win64\bin
이어서 아래 명령어를 그대로 입력해준다!(위에 파일이 있으니 그안에 내용을 복붙하면된다)
openssl pkcs12 -export -in certificate.pem.crt -inkey private.pem.key -out certificate.cert.pfx -certfile AmazonRootCA1.pem
그럼 비밀번호를 두번 입력하라고 한다!
본인 마음대로 비밀번호를 지정하면 된다!
녹칸다는 "nockanda"라고 입력했다!
(조금 있다가 C#코드에 이 내용이 필요하므로 기억해두자)
지금까지 제대로 했다면 위 화면처럼 pfx파일이 생성되어 있을 것이다!
이게 C#에서 사용하게 될 디바이스 인증서가 된다!
새롭게 만든 디바이스 인증서와 CA인증서를 C#윈폼 프로젝트로 가지고 간다!
그리고 아래 코드를 활용한다!
ca2에 "nockanda" 부분이 새롭게 만든 디바이스 인증키의 비밀번호이다!
X509Certificate ca1 = new X509Certificate("AmazonRootCA1.pem");
X509Certificate2 ca2 = new X509Certificate2("certificate.cert.pfx", "비밀번호");
client = new MqttClient("엔드포인트",
8883,
true,
ca1,
ca2,
MqttSslProtocols.TLSv1_2, RemoteCertificateValidationCallback);
bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
// logic for validation here
return true;
}
m2mqtt에 접속부분을 바꿔주면 접속이 가능해진다!
중요한것은 구독할때 qos를 0으로 해야한다는것이다!
그럼 aws iot에 esp32가 MQTT ssl/tls로 업로드하는 센서데이터가 C#윈폼화면에 나오게 된다!
결과 영상을 녹칸다네 유튜브에 업로드 해두었으니 참고~~~!