투케이2K

107. (TWOK/LOGIC) [android] 안드로이드 브로커 MQTT 방식 사용해 aws 플릿 프로비저닝 연결 방법 - CA 인증서 및 SSL 인증 본문

투케이2K 로직정리

107. (TWOK/LOGIC) [android] 안드로이드 브로커 MQTT 방식 사용해 aws 플릿 프로비저닝 연결 방법 - CA 인증서 및 SSL 인증

투케이2K 2024. 10. 29. 19:25

[로직 정리]

정리 로직 : Android / 안드로이드

상태 : [android] 안드로이드 브로커 MQTT 방식 사용해 aws 플릿 프로비저닝 연결 방법 - CA 인증서 및 SSL 인증

 

[설 명]

 

// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

- aws 플릿 프로비저닝 연결을 위한 안드로이드 프로젝트 생성 필요


- 안드로이드 build.gradle 파일에 paho.mqtt.android - MqttAndroidClient 안드로이드 MQTT 통신 라이브러리 설치 필요

  >> 해당 라이브러리 통신 사용 시 안드로이드 13 이상 alarmManager.canScheduleExactAlarms() 권한 부여 상태 체크 필요


- 라이브러리 통신에 필요한 퍼미션 권한 설정 필요 (AndroidManifest.xml 파일)

  >> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
  >> <uses-permission android:name="android.permission.USE_EXACT_ALARM" />


- SSL 인증에 필요한 ca , crt , private key 파일 인증서 준비 필요

  >> 준비 된 파일은 안드로이드 raw 폴더 내에 저장 수행


- aws 연결에 필요한 endPoint 엔드 포인트 / 템플릿 명칭 / QoS 네트워크 접속 품질 정보] 정보 및 파일 전달 받기

  >> aws 연결에 사용되는 MQTT 포트는 8883 포트


- aws MQTT 통신에 사용 되는 버전 확인 필요 (MQTT 3.1.1 or MQTT 5)

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------

1. 안드로이드 Aws MQTT 연결에 필요한 URL 및 기본 설정 값 지정 수정

  >> C_Broker_Mqtt_Client_Module.URL = "ssl://a1...9-ats.iot.ap-northeast-1.amazonaws.com:8883"; // TODO [AWS 엔드 포인트 지정 접속 URL 설정]

  >> C_Broker_Mqtt_Client_Module.TOPIC = "$aws/certificates/create/json/accepted"; // TODO [AWS 임시 인증서를 발급 받기 위한 토픽 정의]

  >> String publishTopic = "$aws/certificates/create/json"; // TODO [AWS 임시 인증서를 발급 요청하기 위한 publish 정보]

  >> C_Broker_Mqtt_Client_Module.CLIENT_ID = UUID.randomUUID().toString(); // [AWS 연결에 사용 될 클라이언트 아이디]
  
  >> C_Broker_Mqtt_Client_Module.QOS = 0; // [AWS 연결에 사용될 네트워크 품질]
  
  >> C_Broker_Mqtt_Client_Module.MQTT_VERSION = MqttConnectOptions.MQTT_VERSION_3_1_1; // [AWS MQTT 통신 버전]


2. 안드로이드 raw 폴더에 저장 된 ca , crt , private key 를 InputStream 으로 읽은 후 Aws MQTT 연결에 필요한 mqttConnectOptions.setSocketFactory 소켓 SSL 인증 설정 지정

  >> 인증서 확장자 : ca (pem) / crt (crt) / private key (key)

  SSLSocketFactory socketFactory = null;
  try {
      InputStream CA_InputStream = getResources().openRawResource(R.raw.ca_certificate); // TODO [확장자 : pem]
      InputStream CERT_InputStream = getResources().openRawResource(R.raw.client_certificate); // TODO [확장자 : crt]
      InputStream KEY_InputStream = getResources().openRawResource(R.raw.client_private); // TODO [확장자 : key]

      socketFactory = C_Broker_Mqtt_Client_Module.getSocketFactory(CA_InputStream, CERT_InputStream, KEY_InputStream);
  }
  catch (Exception e){
      e.printStackTrace();
  }

  if (socketFactory != null){
      mqttConnectOptions.setSocketFactory(socketFactory);
      S_Log._W_("MQTT 연결을 위한 SSLSocketFactory 설정 수행", null);
  }


3. 안드로이드 mqttAndroidClient.connect MQTT 연결 수행 및 연결 콜백 응답 확인

  >> IMqttActionListener mqttCallback = new IMqttActionListener() // [AWS 연결 상태 콜백 응답 확인]


4. 정상적으로 연결이 완료 된 경우 >> 임시 인증서 발급을 받기 위한 subscribe 토픽 구독 수행 실시

  >> $aws/certificates/create/json/accepted


5. 정상적으로 구독이 완료 된 경우 임시 인증서 발급 요청 publish 수행

  >> $aws/certificates/create/json


6. 구독 된 곳에서 json 형식으로 임시 인증서가 정상적으로 내려 온 것 확인

  >> 해당 발급 받은 인증서를 사용해 aws 기기 연결 및 shadow 통신 등에 사용

  >> 단말기 자체 내부 저장소에 저장 보관이 필요한 인증서

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[MQTT (Message Queueing Telemetry Transport) 통신 학습 정리]

https://blog.naver.com/kkh0977/223144831968?trackingCode=blog_bloghome_searchlist


[mosquitto 사용해 MQTT 통신 테스트 환경 구축]

https://blog.naver.com/kkh0977/222971768497?trackingCode=blog_bloghome_searchlist


[paho.mqtt.android - MqttAndroidClient 안드로이드 MQTT 통신 라이브러리]

https://blog.naver.com/kkh0977/223557263865?trackingCode=blog_bloghome_searchlist


[[aws] Aws IoT Core MQTT 디바이스 통신 프로토콜 및 port 종류 확인]

https://blog.naver.com/kkh0977/223580748811?trackingCode=blog_bloghome_searchlist


[[유틸 파일] getSocketFactory : CA , Crt , Key 사용해 SSL 인증 시 필요한 SSLSocketFactory 반환]

https://blog.naver.com/kkh0977/223587279937?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------

 

반응형
Comments