SDK 없이 HTTPS를 통해 X.509 인증서를 사용하는 방법

이 방법 문서에서는 Azure IoT DPS 디바이스 SDK를 사용하지 않고 HTTPS를 통해 x.509 인증서를 사용하여 디바이스를 프로비전합니다. 대부분의 언어는 HTTP 요청을 보내는 라이브러리를 제공하지만 특정 언어에 집중하지 않고 이 문서에서 는 cURL 명령줄 도구를 사용하여 HTTPS를 통해 보내고 받습니다.

Linux 또는 Windows 컴퓨터에서 이 문서의 단계를 수행할 수 있습니다. WSL(Linux용 Windows 하위 시스템)에서 실행 중이거나 Linux 컴퓨터에서 실행 중인 경우 Bash 프롬프트에서 로컬 시스템의 모든 명령을 입력할 수 있습니다. Windows에서 실행하는 경우 GitBash 프롬프트에서 로컬 시스템의 모든 명령을 입력합니다.

이 문서의 경로는 등록 항목 유형 및 사용하기로 선택한 X.509 인증서의 유형에 따라 여러 경로가 있습니다. 필수 구성 요소를 설치한 후 계속하기 전에 개요 를 읽어야 합니다.

필수 구성 요소

  • Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

  • Azure Portal로 IoT Hub Device Provisioning Service 설정의 단계를 완료합니다.

  • 컴퓨터에 Python 3.7 이상이 설치되어 있는지 확인합니다. 또는 python3 --version를 실행 python --version 하여 Python 버전을 확인할 수 있습니다.

  • Windows에서 실행하는 경우 최신 버전의 Git을 설치합니다. Git이 명령 창에 액세스할 수 있는 환경 변수에 추가되었는지 확인합니다. 설치할 git 도구의 최신 버전은 Software Freedom Conservancy의 Git 클라이언트 도구를 참조하세요. 여기에는 로컬 Git 리포지토리와 상호 작용하는 데 사용할 수 있는 명령줄 앱인 Git Bash가 포함됩니다. Windows에서는 GitBash 프롬프트에서 로컬 시스템의 모든 명령을 입력합니다.

  • Azure CLI. 이 문서에서는 Azure CLI 명령을 실행하기 위한 두 가지 옵션이 있습니다.

    • 브라우저에서 CLI 명령을 실행하는 대화형 셸인 Azure Cloud Shell을 사용합니다. 이 옵션은 아무 것도 설치할 필요가 없으므로 권장됩니다. 처음으로 Cloud Shell을 사용하는 경우 Azure Portal에 로그인합니다. Cloud Shell 빠른 시작의 단계를 따라 Cloud Shell을 시작하고Bash 환경을 선택합니다.
    • 선택적으로 로컬 컴퓨터에서 Azure CLI를 실행합니다. Azure CLI가 이미 설치된 경우 az upgrade를 실행하여 CLI 및 확장을 현재 버전으로 업그레이드합니다. Azure CLI를 설치하는 방법은 Azure CLI 설치를 참조하세요.
  • Linux 또는 WSL 환경에서 실행하는 경우 Bash 프롬프트를 열어 명령을 로컬로 실행합니다. Windows 환경에서 실행하는 경우 GitBash 프롬프트를 엽니다.

개요

이 문서에서 다루는 세 가지 시나리오가 있으며 수행할 초기 단계는 각각 다릅니다. 수행할 작업

선택한 시나리오에 대한 단계를 완료한 후에는 디바이스 등록원격 분석 메시지 보내기를 계속할 수 있습니다.

디바이스 인증서 만들기

이 문서에서는 X.509 인증서를 사용하여 개별 등록 또는 등록 그룹을 사용하여 DPS로 인증합니다.

개별 등록을 사용하는 경우 자체 서명된 X.509 인증서 또는 디바이스 인증서와 하나 이상의 서명 인증서로 구성된 인증서 체인 을 사용할 수 있습니다. 등록 그룹을 사용하는 경우 인증서 체인을 사용해야 합니다.

중요

X.509 등록 인증의 경우 디바이스 인증서의 주체 CN(일반 이름)이 디바이스의 등록 ID로 사용됩니다. 등록 ID는 영숫자 문자의 대/소문자를 구분하지 않는 문자열과 특수 문자인 '-', , '.', '_'':'입니다. 마지막 문자는 영숫자 또는 대시('-')여야 합니다. DPS는 최대 128자 길이의 등록 ID를 지원합니다. 그러나 X.509 인증서의 주체 일반 이름은 64자로 제한됩니다. 다음 단계에서 디바이스 인증서의 주체 일반 이름을 변경하는 경우 이 형식을 준수하는지 확인합니다.

자체 서명된 인증서 사용

개별 등록과 함께 사용할 자체 서명된 인증서를 만들려면 인증서를 만들 디렉터리로 이동하여 다음 단계를 수행합니다.

  1. 다음 명령을 실행합니다.

    winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
    

    중요

    주체 이름(//CN=my-x509-device)에 제공된 추가 슬래시는 Windows 플랫폼에서 Git을 사용하여 문자열을 이스케이프하는 데만 필요합니다.

  2. PEM 암호 입력: 이라는 메시지가 표시되면 암호 1234를 사용합니다.

  3. 확인 - PEM 암호 입력: 이라는 메시지가 표시되면 암호 1234를 다시 사용합니다.

    이제 명령을 실행 openssl 한 디렉터리에서 공개 키 인증서 파일(device-cert.pem) 및 프라이빗 키 파일(device-key.pem)이 생성되어야 합니다.

    인증서 파일에는 주체 CN(일반 이름)이 로 설정되어 있습니다 my-x509-device.

    프라이빗 키 파일은 통과 구인 1234로 보호됩니다.

  4. 인증서 파일은 Base64로 인코딩됩니다. 주체 CN(일반 이름) 및 인증서 파일의 다른 속성을 보려면 다음 명령을 입력합니다.

    winpty openssl x509 -in device-cert.pem -text -noout
    
    Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = my-x509-device
        Validity
            Not Before: May  5 21:41:42 2022 GMT
            Not After : Jun  4 21:41:42 2022 GMT
        Subject: CN = my-x509-device
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7:
                    e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29:
                    ...
                    23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f:
                    9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85:
                    0e:cd:53
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
            X509v3 Authority Key Identifier:
                keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
    
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
    Signature Algorithm: sha256WithRSAEncryption
         82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a:
         ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1:
         ...
         cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c:
         ac:d2:49:b9:36:d2:b0:21
    

인증서 체인 사용

등록 그룹을 사용하는 경우 인증서 체인을 사용하여 인증해야 합니다. 개별 등록을 사용하면 인증서 체인 또는 자체 서명된 인증서를 사용할 수 있습니다.

인증서 체인을 만들려면 X.509 인증서 체인 만들기의 지침을 따릅니다. 이 문서에는 하나의 디바이스만 필요하므로 첫 번째 디바이스에 대한 프라이빗 키 및 인증서 체인을 만든 후 중지할 수 있습니다.

완료되면 다음 파일이 있어야 합니다.

인증서 파일 설명
루트 CA 인증서. certs/azure-iot-test-only.root.ca.cert.pem DPS에 업로드되고 확인됩니다.
중간 CA 인증서 certs/azure-iot-test-only.intermediate.cert.pem DPS에서 등록 그룹을 만드는 데 사용됩니다.
device-01 프라이빗 키 private/device-01.key.pem DPS를 사용하여 인증하는 동안 디바이스에서 디바이스 인증서의 소유권을 확인하는 데 사용됩니다.
device-01 인증서 certs/device-01.cert.pem DPS를 사용하여 개별 등록 항목을 만드는 데 사용됩니다.
device-01 전체 체인 인증서 certs/device-01-full-chain.cert.pem DPS를 인증하고 등록하기 위해 디바이스에서 제공합니다.

개별 등록 사용

이 문서에 사용할 개별 등록을 만들려면 az iot dps enrollment create 명령을 사용합니다.

다음 명령은 지정한 디바이스 인증서를 사용하여 DPS 인스턴스에 대한 기본 할당 정책을 사용하여 개별 등록 항목을 만듭니다.

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type x509 --certificate-path {path to your certificate}
  • 리소스 그룹 및 DPS 인스턴스의 이름을 대체합니다.

  • 등록 ID는 디바이스의 등록 ID이며 X.509 등록의 경우 디바이스 인증서의 주체 CN(일반 이름)과 일치해야 합니다.

  • 인증서 경로는 디바이스 인증서의 경로입니다.

참고

Cloud Shell 사용하여 Azure CLI 명령을 실행하는 경우 명령을 실행하기 전에 업로드 단추를 사용하여 인증서 파일을 클라우드 드라이브에 업로드할 수 있습니다.

Azure Cloud Shell 파일 업로드 단추를 보여 주는 스크린샷

등록 그룹 사용

이 문서에 사용할 등록 그룹을 만들려면 az iot dps enrollment-group create 명령을 사용합니다.

다음 명령은 중간 CA 인증서를 사용하여 DPS 인스턴스에 대한 기본 할당 정책을 사용하여 등록 그룹 항목을 만듭니다.

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --certificate-path {path_to_your_certificate}
  • 리소스 그룹 및 DPS 인스턴스의 이름을 대체합니다.

  • 등록 ID는 영숫자 문자와 특수 문자'-', , , '.''_'':'의 대/소문자를 구분하지 않는 문자열입니다. 마지막 문자는 영숫자 또는 대시('-')여야 합니다. 등록 그룹에 사용하도록 선택한 이름일 수 있습니다.

  • 인증서 경로는 중간 인증서의 경로입니다. 인증서 체인 사용의 지침을 따른 경우 파일 이름은 certs/azure-iot-test-only.intermediate.cert.pem입니다.

참고

Cloud Shell 사용하여 Azure CLI 명령을 실행하는 경우 명령을 실행하기 전에 업로드 단추를 사용하여 인증서 파일을 클라우드 드라이브에 업로드할 수 있습니다.

Azure Cloud Shell 파일 업로드 단추를 보여 주는 스크린샷

참고

원하는 경우 이전에 DPS를 사용하여 업로드 및 확인된 서명 인증서를 기반으로 등록 그룹을 만들 수 있습니다(다음 섹션 참조). 이렇게 하려면 를 사용하여 인증서 이름을 --ca-name 지정하고 명령에서 매개 변수를 --certificate-pathaz iot dps enrollment-group create 생략합니다.

서명 인증서 업로드 및 확인

개별 등록 또는 등록 그룹에 인증서 체인을 사용하는 경우 디바이스 인증서의 서명 체인에서 DPS에 인증서를 하나 이상 업로드하고 확인해야 합니다.

  • 개별 등록의 경우 디바이스의 인증서 체인에 있는 서명 인증서일 수 있습니다.

  • 등록 그룹의 경우 등록 그룹에 설정된 인증서 또는 루트 CA 인증서를 포함하여 등록 체인의 인증서일 수 있습니다.

인증서를 업로드하고 확인하려면 az iot dps certificate create 명령을 사용합니다.

az iot dps certificate create -g {resource_group_name} --dps-name {dps_name} --certificate-name {friendly_name_for_your_certificate} --path {path_to_your_certificate} --verified true
  • 리소스 그룹 및 DPS 인스턴스의 이름을 대체합니다.

  • 인증서 경로는 서명 인증서의 경로입니다. 이 문서에서는 루트 CA 인증서를 업로드하는 것이 좋습니다. 인증서 체인 사용의 지침을 따른 경우 파일 이름은 certs/azure-iot-test-only.root.ca.cert.pem입니다.

  • 인증서 이름은 영숫자 문자 또는 특수 문자 -._만 포함할 수 있습니다. 공백은 허용되지 않습니다. 예를 들어 "azure-iot-test-only-root"입니다.

참고

Cloud Shell 사용하여 Azure CLI 명령을 실행하는 경우 명령을 실행하기 전에 업로드 단추를 사용하여 인증서 파일을 클라우드 드라이브에 업로드할 수 있습니다.

Azure Cloud Shell 파일 업로드 단추를 보여 주는 스크린샷

참고

이 섹션의 단계에서는 업로드할 때 인증서를 자동으로 확인했습니다. 인증서를 수동으로 확인할 수도 있습니다. 자세한 내용은 중간 또는 루트 CA의 수동 확인을 참조하세요.

디바이스 등록

디바이스 REST API 등록을 호출하여 DPS를 통해 디바이스를 프로비전합니다.

다음 curl 명령을 사용합니다.

curl -L -i -X PUT --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31

여기서

  • -L 는 HTTP 리디렉션을 따르도록 curl을 지시합니다.

  • –i 는 출력에 프로토콜 헤더를 포함하도록 curl을 지시합니다. 이러한 헤더는 반드시 필요한 것은 아니지만 유용할 수 있습니다.

  • -X PUT 는 curl이 HTTP PUT 명령임을 알려줍니다. 이 API 호출에 필요합니다.

  • --cert [path_to_your_device_cert] 는 디바이스의 X.509 인증서를 찾을 수 있는 위치를 curl에 알려줍니다. 디바이스 프라이빗 키가 통과 구로 보호되는 경우 콜론 앞에 오는 인증서 경로 다음에 통과 구를 추가할 수 있습니다(예: --cert my-device.pem:1234).

    • 자체 서명된 인증서를 사용하는 경우 디바이스 인증서 파일에는 단일 X.509 인증서만 포함됩니다. 자체 서명된 인증서 사용의 지침을 따른 경우 filename은 device-cert.pem이고 프라이빗 키 패스 구는 이므로 1234를 사용합니다--cert device-cert.pem:1234.

    • 예를 들어 등록 그룹을 통해 인증할 때 인증서 체인을 사용하는 경우 디바이스 인증서 파일에 유효한 인증서 체인이 포함되어야 합니다. 인증서 체인에는 디바이스 인증서와 확인된 인증서까지의 서명 인증서가 포함되어야 합니다. 인증서 체인을 사용하여 인증서 체인 만들기의 지침을 따른 경우 파일 경로는 certs/device-01-full-chain.cert.pem이므로 를 사용합니다--cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] 는 디바이스의 프라이빗 키를 찾을 수 있는 위치를 curl에 알려줍니다.

    • 자체 서명된 인증서 사용의 지침을 따른 경우 filename은 device-key.pem이므로 를 사용합니다--key device-cert.pem:1234.

    • 인증서 체인 사용의 지침을 따른 경우 키 경로는 certs/device-01-full-chain.cert.pem이므로 를 사용합니다--cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' 는 JSON 콘텐츠를 게시하고 있으며 'application/json'이어야 한다고 DPS에 알릴 수 있습니다.

  • -H 'Content-Encoding: utf-8' 는 메시지 본문에 사용 중인 인코딩을 DPS에 알려줍니다. OS/클라이언트에 대한 적절한 값으로 설정합니다. 그러나 일반적으로 utf-8입니다.

  • -d '{"registrationId": "[registration_id]"}'–d 매개 변수는 게시 중인 메시지의 '데이터' 또는 본문입니다. '{"registrationId":"[registration_id"}' 형식의 JSON이어야 합니다. curl의 경우 작은따옴표로 래핑됩니다. 그렇지 않으면 JSON에서 큰따옴표를 이스케이프해야 합니다. X.509 등록의 경우 등록 ID는 디바이스 인증서의 주체 CN(일반 이름)입니다.

  • 마지막으로 마지막 매개 변수는 게시할 URL입니다. "일반"(즉, 온-프레미스가 아님)의 경우 전역 DPS 엔드포인트 인 global.azure-devices-provisioning.net 사용됩니다 https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. 및 [registration_id] 를 적절한 값으로 바꿔 [dps_scope_id] 야 합니다.

예를 들면 다음과 같습니다.

  • 자체 서명된 인증서 사용의 지침을 따른 경우:

    curl -L -i -X PUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "my-x509-device"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register?api-version=2021-06-01
    
  • 인증서 체인 사용의 지침을 따른 경우:

    curl -L -i -X PUT --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "device-01"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/device-01/register?api-version=2021-06-01
    

성공한 호출은 다음과 유사한 응답을 갖습니다.

HTTP/1.1 202 Accepted
Date: Sat, 27 Aug 2022 17:53:18 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register
Retry-After: 3
x-ms-request-id: 05cdec07-c0c7-48f3-b3cd-30cfe27cbe57
Strict-Transport-Security: max-age=31536000; includeSubDomains

{"operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a","status":"assigning"}

응답에는 작업 ID 및 상태가 포함됩니다. 이 경우 상태는 로 설정 assigning됩니다. DPS 등록은 잠재적으로 장기 실행 작업이므로 비동기적으로 수행됩니다. 일반적으로 작업 상태 조회 REST API를 사용하여 상태를 폴링하여 디바이스가 할당된 시기 또는 오류가 발생했는지 여부를 확인합니다.

DPS의 유효한 상태 값은 다음과 같습니다.

  • assigned: 상태 호출의 반환 값은 디바이스가 할당된 IoT Hub 나타냅니다.

  • assigning: 작업이 계속 실행 중입니다.

  • disabled: DPS에서 등록 레코드를 사용할 수 없으므로 디바이스를 할당할 수 없습니다.

  • failed: 할당이 실패했습니다. 응답의 레코드에 registrationStateerrorMessage 가 반환되어 errorCode 실패한 항목을 나타냅니다.

  • unassigned

작업 상태 조회 API를 호출하려면 다음 curl 명령을 사용합니다.

curl -L -i -X GET --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/operations/[operation_id]?api-version=2019-03-31

디바이스 등록 요청에서와 동일한 ID 범위, 등록 ID 및 인증서 및 키를 사용합니다. 디바이스 등록 응답에서 반환된 작업 ID를 사용합니다.

예를 들어 다음 명령은 자체 서명된 인증서 사용에서 만든 자체 서명된 인증서에 대한 것입니다. (ID 범위 및 작업 ID를 수정해야 합니다.)

curl -L -i -X GET --cert ./device-certPUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/operations/5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a?api-version=2021-06-01

다음 출력은 성공적으로 할당된 디바이스에 대한 응답을 보여줍니다. 속성은 status 이며 assigned 속성은 디바이스가 registrationState.assignedHub 프로비전된 IoT Hub로 설정됩니다.

HTTP/1.1 200 OK
Date: Sat, 27 Aug 2022 18:10:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
x-ms-request-id: 8f211bc5-3ed8-4c8b-9a79-e003e756e9e4
Strict-Transport-Security: max-age=31536000; includeSubDomains

{
   "operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a",
   "status":"assigned",
   "registrationState":{
      "x509":{
         
      },
      "registrationId":"my-x509-device",
      "createdDateTimeUtc":"2022-08-27T17:53:19.5143497Z",
      "assignedHub":"MyExampleHub.azure-devices.net",
      "deviceId":"my-x509-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-27T17:53:19.7519141Z",
      "etag":"IjEyMDA4NmYyLTAwMDAtMDMwMC0wMDAwLTYzMGE1YTBmMDAwMCI="
   }
}

디바이스 ID 및 할당된 IoT Hub를 적어 둡니다. 이를 사용하여 다음 섹션에서 원격 분석 메시지를 보냅니다.

원격 분석 메시지 보내기

IoT Hub 디바이스 이벤트 REST API를 호출하여 디바이스에 원격 분석을 보냅니다.

다음 curl 명령을 사용합니다.

curl -L -i -X POST --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

여기서

  • -X POST 는 curl이 HTTP POST 명령임을 알려줍니다. 이 API 호출에 필요합니다.

  • --cert [path_to_your_device_cert] 는 디바이스의 X.509 인증서를 찾을 수 있는 위치를 curl에 알려줍니다. 디바이스 프라이빗 키가 통과 구로 보호되는 경우 콜론 앞에 오는 인증서 경로 다음에 통과 구를 추가할 수 있습니다(예: --cert my-device.pem:1234).

    • 자체 서명된 인증서를 사용하는 경우 디바이스 인증서 파일에는 단일 X.509 인증서만 포함됩니다. 자체 서명된 인증서 사용의 지침을 따른 경우 filename은 device-cert.pem이고 프라이빗 키 패스 구는 이므로 1234를 사용합니다--cert device-cert.pem:1234.

    • 인증서 체인을 사용하는 경우 디바이스 인증서 파일에 유효한 인증서 체인이 포함되어야 합니다. 인증서 체인을 사용하여 인증서 체인 만들기의 지침을 따른 경우 파일 경로는 certs/device-01-full-chain.cert.pem이므로 를 사용합니다--cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] 는 디바이스의 프라이빗 키를 찾을 수 있는 위치를 curl에 알려줍니다.

    • 자체 서명된 인증서 사용의 지침을 따른 경우 filename은 device-key.pem이므로 를 사용합니다--key device-cert.pem:1234.

    • 인증서 체인 사용의 지침을 따른 경우 키 경로는 certs/device-01-full-chain.cert.pem이므로 를 사용합니다--cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json'는 JSON 콘텐츠를 게시하는 IoT Hub 알려주며 'application/json'이어야 합니다.

  • -H 'Content-Encoding: utf-8'는 메시지 본문에 사용하는 인코딩을 IoT Hub 알려줍니다. OS/클라이언트에 대한 적절한 값으로 설정합니다. 그러나 일반적으로 utf-8입니다.

  • -d '{"temperature": 30}'–d 매개 변수는 게시 중인 메시지의 '데이터' 또는 본문입니다. 이 문서에서는 단일 온도 데이터 포인트를 게시합니다. 콘텐츠 형식이 application/json으로 지정되었으므로 이 요청의 경우 본문은 JSON입니다. curl의 경우 작은따옴표로 래핑됩니다. 그렇지 않으면 JSON에서 큰따옴표를 이스케이프해야 합니다.

  • 마지막 매개 변수는 게시할 URL입니다. 송신 디바이스 이벤트 API의 경우 URL은 입니다 https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • 을 디바이스가 할당된 IoT Hub의 이름으로 바꿉 [assigned_iot_hub_name] 니다.

    • 을 디바이스를 등록할 때 할당된 디바이스 ID로 바꿉니다 [device_id] . 등록 그룹을 통해 프로비전하는 디바이스의 경우 디바이스 ID는 등록 ID입니다. 개별 등록의 경우 필요에 따라 등록 항목의 등록 ID와 다른 디바이스 ID를 지정할 수 있습니다.

예를 들면 다음과 같습니다.

  • 자체 서명된 인증서 사용의 지침을 따른 경우:

    curl -L -i -X POST --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    
  • 인증서 체인 사용의 지침을 따른 경우:

    curl -L -i -X POST --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    

성공한 호출은 다음과 유사한 응답을 갖습니다.

HTTP/1.1 204 No Content
Content-Length: 0
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: aa58c075-20d9-4565-8058-de6dc8524f14
Date: Wed, 31 Aug 2022 18:34:44 GMT

다음 단계