Azure IoT Hub에 openssl로 만든 X.509 인증서를 사용하여 mosquitto로 연결

Azure IoT Hub에 openssl로 자체 제작한 X.509 인증서를 사용하여 연결할 수 있었으므로 메모입니다.

하고 싶은 일



대칭 키가 아닌 X.509 CA 서명된 인증서로 IoT Hub에 연결하고 싶습니다.


이런 튜토리얼도 있습니다, 자신의 이해를 위해 openssl 베이스로 작성해 보겠습니다
htps : // 기주 b. 코 m / 아즈레 / 아즈레 - 오 tskk / b / b / bs / r / 및 ls / kase r chifukate s / kase r chifukate ゔぇr ゔぃえw. md

연결은 mosquitto_pub를 사용한 MQTT입니다.
h tps : //도 s 굉장히. rg/

주의



자신이 CA가 되어 비밀키를 사용해 서명하는 순서가 됩니다.

포인트


  • 사용자 이름에 [IoT Hub 名].azure-devices.net/[デバイス名]를 지정해야 합니다.
    htps : // / cs. mic로소 ft. 코 m / 자 jp / 아즈레 / 이오 t 후 b / 이오 t 후 b mq t t 굉장히 rt # 우신 g 오, 어서
  • 연결은 MQTT v3.1.1이어야 합니다. mosquitto 버전이 오래된 경우 명시 적으로 -V mqttv311를 지정하십시오.
    htps : // / cs. mic로소 ft. 코 m / 자 jp / 아즈레 / 이오 t 후 b / 이오 t 후 b mq
  • 장치 인증서의 공통 이름 (CN)에 장치 이름이어야합니다 (이 리소스를 찾을 수 없으므로 출처를 알고 있다면 알려주십시오.)

    환경



    WSL (Ubuntu)에서 실행되었습니다.
  • OpenSSL : 1.1.0g
  • mosquitto_pub : 1.6.7
  • Azure CLI : 2.0.69
  • azure-cli-iot-ext : 0.7.1

  • 절차



    그럼 신경이 쓰이는 순서입니다.

    준비



    최신 버전의 mosquitto 설치는 이 Qiita 기사를 참고했습니다.
    htps : // 코 m / 응 - 야마나카 / ms / 73 4d3022186732b4 88

    Azure CLI 및 IoT Hub용 확장 프로그램도 설치합니다.

    htps : // / cs. mic로소 ft. 코 m / 그럼 jp / c ぃ / あずれ / い s た l ー あずれ - c ぃ?ゔ ぃ w = 아즈레 - c ぃ - st
    htps : // 기주 b. 이 m / 아즈레 / 아즈레 - 오 - tc - x x 텐시 온 / b / b /에서 v / 레아 D. md

    Azure CLI로 로그인하여 IoT Hub를 만듭니다.
    htps : // / cs. mic로소 ft. 코 m / 자 jp / 아즈레 / 이오 t 후 b / 이오 t 후 b c
    # mosquitto のインストール
    sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
    sudo apt-get install mosquitto mosquitto-clients
    
    # Azure CLI と拡張機能のインストール
    curl -L https://aka.ms/InstallAzureCli | bash
    az extension add --name azure-cli-iot-ext
    
    # Azure CLI でログイン
    az login
    
    # IoT Hub の作成
    # リソースグループ名・IoT Hub 名は適宜指定してください
    RgName=[リソースグループ名]
    HubName=[IoT Hub 名]
    az group create --name ${RgName} -l japaneast
    az iot hub create -n ${HubName} -g ${RgName} --sku F1
    

    CA 인증서 생성 및 IoT Hub에 등록


    # ルート証明書の作成
    # subject は適宜修正してください
    openssl genrsa -out rootCA.key 2048
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem  -subj "/C=JP/ST=Tokyo/O=TestOrg/OU=TestOu"
    
    # ルート証明書のアップロード
    # 証明書名は適宜指定してください
    CertName=[証明書名]
    az iot hub certificate create --hub-name ${HubName} --name ${CertName} --path ./rootCA.pem -g ${RgName}
    
    # verification code の取得
    etag=`az iot hub certificate show -n ${CertName} --hub-name ${HubName} -o tsv --query etag`
    VeriCode=`az iot hub certificate generate-verification-code --etag ${etag} --name ${CertName} --hub-name ${HubName} -o tsv --query properties.verificationCode`
    
    # verification code をもとに Verification Certificate (検証証明書) を作成する。
    # Common Name を verification code にする。その他の subject は適宜修正してください
    openssl genrsa -out verificationCert.key 2048
    openssl req -new -key verificationCert.key -out verificationCert.csr -subj "/C=JP/ST=Tokyo/O=TestOrg/OU=TestOu/CN=${VeriCode}"
    openssl x509 -req -in verificationCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out verificationCert.pem -days 500 -sha256
    
    # Verification Certificate (検証証明書) をアップロードする
    etag=`az iot hub certificate show -n ${CertName} --hub-name ${HubName} -o tsv --query etag`
    az iot hub certificate verify --etag ${etag} --name ${CertName} --path ./verificationCert.pem --hub-name ${HubName}
    
    # 以下のコマンドで True となっていれば Verificate できています。
    az iot hub certificate show -n ${CertName} --hub-name ${HubName} --query properties.isVerified
    

    포털이면 "인증서"에서 동등한 설정을 할 수 있습니다.
    자세한 내용은 다음 URL을 참조하십시오.
    htps : // / cs. mic로소 ft. 코 m / 자 - jp / 아즈레 / 이오 t 후 b / 이오 t 후 b - 쿠 ty x 509 게 ts r d d 후카테 s-와 r

    장치 및 장치 인증서 만들기


    # デバイスの作成
    # デバイス名は適宜指定してください
    deviceId=[デバイス名]
    az iot hub device-identity create --device-id ${deviceId} --hub-name ${HubName} --auth-method x509_ca
    
    # デバイス証明書の作成
    openssl genrsa -out deviceCert.key 2048
    openssl req -new -key deviceCert.key -out deviceCert.csr -subj "/C=JP/ST=Tokyo/O=TestOrg/OU=TestOu/CN=${deviceId}"
    openssl x509 -req -in deviceCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out deviceCert.pem -days 500 -sha256
    

    MQTT로 연결



    Azure 측 CA 인증서는 Baltimore CyberTrust Root입니다. 기본적으로 들어있는 클라이언트도 많지만 그렇지 않은 경우 여기에서 다운로드합니다.
    htps : // 바바 치모레 - cy rt st st - 로오 t. 짱-하지만 s.ぢぎせ rt. 코 m/인후아/그리고 x. HTML
    # mosquitto で接続
    mosquitto_pub -d -h ${HubName}.azure-devices.net -p 8883 --cafile /etc/ssl/certs/Baltimore_CyberTrust_Root.pem --cert ./deviceCert.pem --key ./deviceCert.key -i ${deviceId} -u "${HubName}.azure-devices.net/${deviceId}" -t "devices/${deviceId}/messages/events/" -m '{"message": "Hello IoT Hub!"}'
    

    이러한 메시지를 확인할 수 있으면 연결할 수 있습니다.
    $ mosquitto_pub -d -h ${HubName}.azure-devices.net -p 8883 --cafile /etc/ssl/certs/Baltimore_CyberTrust_Root.pem --cert ./deviceCert.pem --key ./deviceCert.key -i ${deviceId} -u "${HubName}.azure-devices.net/${deviceId}" -t "devices/${deviceId}/messages/events/" -m '{"message": "Hello IoT Hub!"}'
    Client test sending CONNECT
    Client test received CONNACK (0)
    Client test sending PUBLISH (d0, q0, r0, m1, 'devices/test/messages/events/', ... (29 bytes))
    Client test sending DISCONNECT
    

    포털이면 장치는 IoT 장치에서 만들 수 있습니다.

    메시지 확인



    메시지 확인은 Azure CLI에서 불행히도 불가능합니다. 다음과 같은 도구를 사용하여 확인해 보십시오.
  • Windows의 경우: Device Explorer
  • Windows 이외의 경우: IoT Hub Explorer
  • 좋은 웹페이지 즐겨찾기