HTTPS - AWS IoT 코어

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

HTTPS

클라이언트는 HTTP 1.0 또는 1.1 프로토콜을 사용하여 REST API에 요청하여 메시지를 게시할 수 있습니다. HTTP 요청에 사용되는 인증 및 포트 매핑에 대해서는 프로토콜, 포트 매핑 및 인증 단원을 참조하십시오.

참고

MQTT와 달리 HTTPS는 clientId 값을 지원하지 않습니다. 따라서 MQTT를 사용할 때 clientId를 사용할 수 있지만 HTTPS를 사용할 때는 사용할 수 없습니다.

HTTPS 메시지 URL

디바이스와 클라이언트는 클라이언트별 엔드포인트 및 주제별 URL에 POST 요청을 하여 메시지를 게시합니다.

https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1"
  • IoT_data_endpointAWS IoT 디바이스 데이터 엔드포인트입니다. 다음과 같이 AWS IoT 명령을 사용하여 클라이언트 또는 사물의 세부 정보 페이지에서 엔드포인트를 찾을 수 있습니다.AWS CLI

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    엔드포인트는 a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com과 같아야 합니다.

  • url_encoded_topic_name 는 전송되는 메시지의 전체 주제 이름입니다.

HTTPS 메시지 코드 예제

다음은 AWS IoT에 HTTPS 메시지를 보내는 방법의 예입니다.

Python
import requests import argparse # define command-line parameters parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.") parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " + "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"") parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.") parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.") parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.") parser.add_argument('--message', default="Hello World!", help="Message to publish. " + "Specify empty string to publish nothing.") # parse and load command-line parameter values args = parser.parse_args() # create and format values for HTTPS request publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1' publish_msg = args.message.encode('utf-8') # make request publish = requests.request('POST', publish_url, data=publish_msg, cert=[args.cert, args.key]) # print results print("Response status: ", str(publish.status_code)) if publish.status_code == 200: print("Response body:", publish.text)
CURL

클라이언트 또는 디바이스에서 curl을 사용하여 AWS IoT에 메시지를 보낼 수 있습니다.

curl을 사용하여 위의 AWS IoT 디바이스에 메시지를 전송하려면

  1. 버전을 확인합니다.curl

    1. 클라이언트의 명령 프롬프트에서 이 명령을 실행합니다.

      curl --help

      도움말 텍스트에서 TLS 옵션을 찾습니다. --tlsv1.2 옵션이 표시됩니다.

    2. --tlsv1.2 옵션이 표시되면 계속합니다.

    3. 옵션이 표시되지 않거나 --tlsv1.2 오류가 발생하는 경우 계속하기 전에 클라이언트에서 curl을 업데이트 또는 설치하거나 command not found를 설치해야 할 수 있습니다.openssl

  2. 클라이언트에 인증서를 설치합니다.

    AWS IoT 콘솔에 클라이언트(사물)를 등록할 때 만든 인증서 파일을 복사합니다. 계속하기 전에 클라이언트에 이 세 가지 인증서 파일이 있는지 확인합니다.

    • CA 인증서 파일(Amazon-root-CA-1.pem (이 예제에서는 ).

    • 클라이언트의 인증서 파일(device.pem.crt (이 예제에서는 ).

    • 클라이언트의 프라이빗 키 파일(private.pem.key (이 예제에서는 ).

  3. 명령줄을 생성하여 계정 및 시스템의 해당 값을 대체합니다.curl

    curl --tlsv1.2 \ --cacert Amazon-root-CA-1.pem \ --cert device.pem.crt \ --key private.pem.key \ --request POST \ --data "{ \"message\": \"Hello, world\" }" \ "https://IoT_data_endpoint:8443/topics/topic?qos=1"
    --tlsv1.2

    TLS 1.2(SSL)를 사용합니다.

    --커서트 Amazon-root-CA-1.pem

    피어를 확인하는 데 필요한 경우 CA 인증서의 파일 이름과 경로입니다.

    --cert device.pem.crt

    필요한 경우 클라이언트의 인증서 파일 이름과 경로입니다.

    --키 private.pem.key

    필요한 경우 클라이언트의 프라이빗 키 파일 이름과 경로입니다.

    --요청 POST

    HTTP 요청의 유형입니다(이 경우 POST).

    --데이터 "{ \"message\": \"Hello, world\" }"

    게시할 HTTP POST 데이터입니다. 이 경우 JSON 문자열이며 내부 인용 부호는 백슬래시 문자(\)로 이스케이프됩니다.

    "https://IoT_data_endpoint:8443/주제topic?qos=1"

    클라이언트의 AWS IoT 디바이스 데이터 엔드포인트의 URL 뒤에는 HTTPS 포트 :8443가, 이어서 키워드 /topics/ 및 주제 이름 topic가 옵니다. 서비스 품질을 쿼리 파라미터 ?qos=1로 지정합니다.

  4. 콘솔에서 MQTT 테스트 클라이언트를 엽니다.AWS IoT

    의 지침을 따르고 주제 이름이 AWS IoT MQTT 클라이언트를 사용하여 MQTT 메시지 보기인 메시지를 구독하도록 콘솔을 구성합니다.topic 명령에 사용되거나 curl의 와일드카드 주제 필터를 사용합니다.#

  5. 명령을 테스트합니다.

    AWS IoT 콘솔의 테스트 클라이언트에서 주제를 모니터링하는 동안 클라이언트로 이동하여 3단계에서 만든 curl 명령줄을 실행합니다. 콘솔에 클라이언트의 메시지가 표시되어야 합니다.