Azure IoT Hub에 openssl로 만든 X.509 인증서를 사용하여 mosquitto로 연결
13441 단어 AzuremosquittoopensslAzureIoTHub
하고 싶은 일
대칭 키가 아닌 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가 되어 비밀키를 사용해 서명하는 순서가 됩니다.
포인트
자신이 CA가 되어 비밀키를 사용해 서명하는 순서가 됩니다.
포인트
[IoT Hub 名].azure-devices.net/[デバイス名]
를 지정해야 합니다.htps : // / cs. mic로소 ft. 코 m / 자 jp / 아즈레 / 이오 t 후 b / 이오 t 후 b mq t t 굉장히 rt # 우신 g 오, 어서
-V mqttv311
를 지정하십시오.htps : // / cs. mic로소 ft. 코 m / 자 jp / 아즈레 / 이오 t 후 b / 이오 t 후 b mq
환경
WSL (Ubuntu)에서 실행되었습니다.
절차
그럼 신경이 쓰이는 순서입니다.
준비
최신 버전의 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에서 불행히도 불가능합니다. 다음과 같은 도구를 사용하여 확인해 보십시오.
# 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
# ルート証明書の作成
# 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
# デバイスの作成
# デバイス名は適宜指定してください
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
# 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
Reference
이 문제에 관하여(Azure IoT Hub에 openssl로 만든 X.509 인증서를 사용하여 mosquitto로 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/n_mikuni/items/403f17fd323b003bdf0f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)