関連記事。
- Azure_IoT_Central_ESP32をSeeed Studio XIAO ESP32C3で動かしてみた(グループSAS)
- Azure_IoT_Central_ESP32をSeeed Studio XIAO ESP32C3で動かしてみた(個別X.509)
- Azure_IoT_Central_ESP32をSeeed Studio XIAO ESP32C3で動かしてみた(個別SAS)
- Azure_IoT_Central_ESP32をSeeed Studio XIAO ESP32C3で動かしてみた(グループX.509)
- Azure_IoT_Central_ESP32をSeeed Studio XIAO ESP32C3で動かしてみた(グループX.509 その2)
これの続き。
Azure_IoT_Central_ESP32がX.509認証にも対応しているっぽいので試しました。
デバイスの証明書を作る
docs(今はlearnって言うの?)をいくつか確認しました。 この手順が良さそうです。
opensslコマンドを使うので、WSLのUbuntu 20.04で実行します。
wget https://raw.githubusercontent.com/Azure/azure-sdk-for-c/main/sdk/samples/iot/x509_config.cfg openssl ecparam -out device1_key.pem -name prime256v1 -genkey openssl req -new -days 1 -nodes -x509 -key device1_key.pem -out device1_cert.pem -extensions client_auth -config x509_config.cfg -subj "/CN=device1"
出来上がり~。
証明書に書かれている内容は
openssl x509 -noout -text -in device1_cert.pem
、証明書のFingerprintはopenssl x509 -noout -fingerprint -in device1_cert.pem | sed 's/://g'| sed 's/\(SHA1 Fingerprint=\)//g'
で表示できます。
Azure IoT Centralのデバイスにプライベートキーを設定
Device画面でデバイスを追加して、そのデバイスのConnect画面に証明書を設定します。
- Authentication type = Individual enrollment
- Authentication method = Certificates (X.509)
- Primary = (デバイスの)証明書
- Secondary = (デバイスの)証明書
Secondaryが未設定だとSaveをクリックできないので、Primaryと同じものを設定しました。
サンプルコードの変更はiot_configs.h
だけです。IOT_CONFIG_DEVICE_CERT
はdevice1_cert.pemの中身を(ちょびっと追記して)書きます。IOT_CONFIG_DEVICE_CERT_PRIVATE_KEY
はdevice1_key.pemのBEGIN EC PRIVATE KEYセクションを(ちょびっと追記して)書きます。
iot_configs.h:
#define IOT_CONFIG_WIFI_SSID "seeed2g" #define IOT_CONFIG_WIFI_PASSWORD "seeedjapan" #define IOT_CONFIG_USE_X509_CERT #define IOT_CONFIG_DEVICE_CERT "-----BEGIN CERTIFICATE-----\r\n" \ "MIIBVTCB+6ADAgECAhRGUXxMSg8lDUlZVlsZVTbHyA/gujAKBggqhkjOPQQDAjAS\r\n" \ ... "0jtcD+DMBnSn\r\n" \ "-----END CERTIFICATE-----" #define IOT_CONFIG_DEVICE_CERT_PRIVATE_KEY "-----BEGIN EC PRIVATE KEY-----\r\n" \ "MHcCAQEEIE4EeCf8VnPxovCU0KFkuvFYCM45SfxLSg8X8cC/j/WkoAoGCCqGSM49\r\n" \ ... "nJneEVgERIqGS7GErMOifc65sREQ0VNnmQ==\r\n" \ "-----END EC PRIVATE KEY-----" #define DPS_ID_SCOPE "0ne0014D070" #define IOT_CONFIG_DEVICE_ID "device1"
さあ、動かそう
動いた。
Oh...
翌日、動かなくなったorz
クライアントの証明書を作るときに、有効期間が1dayだった。
気をつけろよ!
わかったこと、気づいたこと
- X.509証明書で認証できた
- Azure IoT Centralの設定箇所さえ気をつければ、簡単な印象
- 証明書の有効期間には注意せよ