Notice
Recent Posts
Recent Comments
Link
투케이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
// --------------------------------------------------------------------------------------
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments