Azure_IoT_Central_ESP32をSeeed Studio XIAO ESP32C3で動かしてみた(個別X.509)

関連記事。

これの続き。

matsujirushi.hatenablog.jp

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"

出来上がり~。

  • device1_key.pem ... (デバイスの)プライベートキー
  • device1_cert.pem ... (デバイスの)証明書

証明書に書かれている内容は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の設定箇所さえ気をつければ、簡単な印象
  • 証明書の有効期間には注意せよ