다음을 통해 공유


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 이상이 설치되어 있는지 확인합니다. python --version 또는 python3 --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 2.0 설치를 참조하세요.
  • Linux 또는 WSL 환경에서 실행 중인 경우 Bash 프롬프트를 열고 로컬로 명령을 실행합니다. Windows 환경에서 실행 중인 경우 GitBash 프롬프트를 엽니다.

개요

이 문서에서는 세 가지 시나리오를 다루며, 수행할 초기 단계는 시나리오마다 다릅니다. 원하는 경우:

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

디바이스 인증서 만들기

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

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

Important

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"
    

    Important

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

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

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

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

    인증서 파일에서 주체 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을 사용하여 인증서 이름을 지정하고 az iot dps enrollment-group create 명령에서 --certificate-path 매개 변수를 생략합니다.

서명 인증서 업로드 및 확인

개별 등록 또는 등록 그룹에 인증서 체인을 사용하는 경우 디바이스 인증서의 서명 체인에 있는 인증서 중 하나 이상을 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은 이 명령이 HTTP PUT 명령이라는 것을 curl에 알려줍니다. 이 API 호출에 필요합니다.

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

    • 자체 서명된 인증서를 사용하는 경우 디바이스 인증서 파일에는 단일 X.509 인증서만 포함됩니다. 자체 서명된 인증서 사용의 지침을 따른 경우 파일 이름은 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에 알려줍니다.

    • 자체 서명된 인증서 사용의 지침을 따른 경우 파일 이름은 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인 경우 작은따옴표로 묶입니다. curl이 아닌 경우 JSON에서 큰따옴표를 이스케이프해야 합니다. X.509 등록의 경우 등록 ID는 디바이스 인증서의 주체 CN(일반 이름)입니다.

  • 마지막 매개 변수는 게시할 URL입니다. "일반"(즉, 온-프레미스가 아님) DPS의 경우 전역 DPS 엔드포인트인 global.azure-devices-provisioning.net이 사용됩니다(예: https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31). [dps_scope_id][registration_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: 할당이 실패했습니다. 무엇이 실패했는지 나타내기 위해 응답의 registrationState 레코드에 errorCodeerrorMessage가 반환됩니다.

  • 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 허브를 적어 둡니다. 다음 섹션에서 원격 분석 메시지를 보낼 때 사용됩니다.

원격 분석 메시지 보내기

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는 이 명령이 HTTP POST 명령이라는 것을 curl에 알려줍니다. 이 API 호출에 필요합니다.

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

    • 자체 서명된 인증서를 사용하는 경우 디바이스 인증서 파일에는 단일 X.509 인증서만 포함됩니다. 자체 서명된 인증서 사용의 지침을 따른 경우 파일 이름은 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에 알려줍니다.

    • 자체 서명된 인증서 사용의 지침을 따른 경우 파일 이름은 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'이어야 한다고 IoT Hub에 알려줍니다.

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

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

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

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

    • [device_id]를 디바이스를 등록할 때 할당된 디바이스 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

다음 단계