BLOG

Port 443 에서 MQTT 와 TLS 고객 인증: 이것이 유용한 이유와 작동법에 관하여
작성일: 2018-02-12

이제 AWS IoT Core서비스를 사용하면 MQTT를 사용하여 포트 443에 대한 TLS클라이언트 인증을 통해 디바이스를 연결할 수 있습니다. 이게 왜 그렇게 대단한 일일까요? 이 기능을 통해 장치를 보다 쉽게 연결하는 방법에 대해 자세히 알아보거나, 바로 이 기능을 활용하는 방법에 대해 알아보세요.

 

443, 8883- 차이점은 무엇인가?

TCP연결은 대개 IP주소와 포트 번호의 조합과 연결됩니다. 이는 사용자의 애플리케이션이 다른 타사 애플리케이션과 통신할 수 있도록 확인하기 위해 어떤 포트 번호가 사용될지에 대한 의문점을 제기합니다. 이 문제를 해결하기 위해 IANA(Internet Assigned Numbers Authority)는 TCP및 UDP포트 번호를 조직에 등록된 다양한 메시징 프로토콜에 매핑 상태를 유지합니다. 이것이 정식 목록은 아니지만, 이러한 표준은 특히 더 인기 있는 프로토콜에 널리 채택되고 있습니다. 데이터베이스를 간단히 검색하면 포트 443이 TLS 상 HTTP에 등록된 포트이고 8883이 TLS 상에 MQTT용으로 등록된 포트임을 알 수 있습니다. AWS IoT Core는 이러한 표준을 최대한 준수하지만(여기를 보세요), 이미 고객과의 경험에서 알 수 있듯이, 이러한 표준을 따르지 않는 것이 타당한 경우도 많이 있습니다.

 

기업체의 방화벽과 가정집의 라우터는 종종 좁은 대역폭의 TCP 포트에서 인바운드와 아웃바운드 트래픽이 전송하는 것에 제한을 합니다. 이는 사이버 공격 가능성이 있는 대상의 공격 목표를 제한하기 위한 보안 조치로 사용됩니다. HTTPS트래픽(포트 443)과 같은 표준 포트는 열린 상태로 유지되지만, MQTT(포트 8883)과 같은 덜 일반적인 프로토콜에 사용되는 포트는 의도적으로 차단될 수 있습니다. 제어할 수 없는 IT환경에서 궁극적으로 사용할 IoT 디바이스를 만들고 있다면 이는 심각한 골칫거리를 야기할 수 있습니다.

 

예를 들어 전국의 병원을 대상으로 판매하는 의료 기기를 제조하는 경우에는 각 병원의 IT부서가 AWS IoT Core 에서 운영되는 IoT 애플리케이션에 연결하기 위해 포트 8883을 공개하는 것에 대하여 각 병원의 IT 부서와 개별적으로 논의하는 것이 쉽지 않은 일일 것입니다. 하지만, 공교롭게도 이 문제를 정확히 해결할 수 있는 TLS 프로토콜의 표준 확장(extension)이 준비되어 있습니다!

 

ALPN – 모든 것을 통제하기 위한 1개의 포트

ALPN (Application Layer Protocol Negotiation)은 가장 일반적인 TLS구현에 의해 지원되는 RFC7301에 의해 정의된 TLS 확장입니다. ALPN는 TLS handshake 중 ClientHello메시지의 일부로 TLS서버에 연결하여 Protocol Name List라는 추가 매개 변수를 전달하도록 합니다.

 

Protocol Name List는 클라이언트가 통신하는 데 사용할 애플리케이션 프로토콜의 기본 설정 순서 목록입니다. TLS서버는 ServerHello 메시지의 일부로 이 목록에서 연결을 통해 응용 프로그램 데이터를 전송하는 데 사용할 프로토콜을 하나 선택합니다. Protocol Name List는 클라이언트가 커뮤니케이션 시에 사용할 애플리케이션 프로토콜의 기본 설정 순서 목록입니다. TLS서버는 ServerHello 메시지의 일부로 이 목록을 통해 응용 프로그램 데이터를 전송하는 데 사용할 프로토콜을 하나를 선택합니다.

 

ALPN 확장을 포함한 전체 TLS handshake는 다음과 같이 작동합니다.

 

 

 

 

AWS IoT Core 는 특별한 Protocol Name 인 “x-amzn-mqtt-ca”를 지원하는데 이를 통해 클라이언트가 MQTT 를 TLS 클라이언트 인증과 함께 사용하도록 지정할 수 있습니다. 클라이언트가 사용할 애플리케이션 프로토콜을 신호 전송하는 것 외에도 AWS IoT Core는 ProtocolName을 TLS handshake의 일부로서 CertificateRequste 을 전송해야 한다는 신호를 보내기 때문에 이 특수 값을 사용해야 합니다. 클라이언트가 AWS IoT Core에서 요청하지 않고 인증서를 보내려고 하면 TLS규격은 AWS IoT Core가 handshake를 종료해야 한다고 지시합니다.

 

MQTT 를 사용하여 포트 443 에 어떻게 디바이스를 연결하나요?

 

  1. 기기의 TLS클라이언트 구현이 ALPN 확장을 지원하는지 확인합니다.
  • 설명서를 참조하는 것이 가장 확실한 방법입니다. 이 위키피디아 페이지 또한 꽤 유용한 정보를 제공합니다.
  • Amazon Free RTOS 소스 코드는 ALPN 확장을 지원합니다.
  1. Certificate 을 만들고, 활성화하고 다운로드하거나 혹은 직접 본인 것을 가져와서 AWS IoT core 에 디바이스를 등록합니다.
  2. “x-amzn-mqtt-ca” protocol* 를 사용하여 당신의 기기에 ALPN 확장을 설정합니다.
  3. 포트 443 에 AWS IoT Core 를 연결합니다.

 

*참고: 현재”x-amm–t-nut”은 AL.PN protocol Name 만 지원되며 포트 443에서만 지원됩니다. 최신상태의 매핑은 AWS IoT 코어 개발자 가이드의 Protocols(Protocols) 페이지에서 항상 찾을 수 있습니다.

 

원문 URL : https://aws.amazon.com/ko/blogs/iot/mqtt-with-tls-client-authentication-on-port-443-why-it-is-useful-and-how-it-works/

 

** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.