申し訳ありません。お使いのブラウザーはJavaScriptをサポートしていません。
サインイン

IAMMETER 電力量計の MQTTS・HTTPS 証明書検証を設定する方法

ファームウェア i.91.065.9 以降の IAMMETER 電力量計は、MQTTS または HTTPS でデータをアップロードする際にサーバー証明書を検証できます。安全な外向き接続に証明書チェーンとサーバーホスト名の検証を追加します。

この記事は TLS の信頼設定を扱います。MQTT トピック、JSON payload、Home Assistant のディスカバリーは設定しません。MQTT の配信手順は MQTT 電力量計:IAMMETER データを MQTT ブローカーへ配信を参照してください。

このページの目次

証明書検証モードを選ぶ

IAMMETER の MQTTS と HTTPS クライアントは、3つのサーバー証明書検証モードに対応しています。

モード 証明書チェーン サーバーホスト名 用途
builtin ファームウェア内蔵ルート CA で検証 検証 対応する証明書チェーンを使う公開サービスに推奨
custom 利用者が提供する PEM ルート CA で検証 検証 プライベート PKI、自己署名構成、内蔵されていない公開ルート
none 検証しない 検証しない 一時的な互換性確認・診断専用

これらは IAMMETER 機器が TLS クライアントとして MQTTS ブローカーや HTTPS サーバーへデータを送る場合の設定です。機器のローカル Web サーバーで HTTPS を有効にするものではありません。

builtin

builtin は既定モードです。TLS 検証設定がまだ保存されていないときに使われ、TLS CA 設定の削除や工場出荷時リセットでもこのモードに戻ります。

ファームウェアには次のルート CA が含まれます。

  • DigiCert Global Root G2
  • ISRG Root X1

機器は証明書チェーンとサーバーホスト名の両方を検証します。MQTTS ブローカーまたは HTTPS サーバーは、これらのルートのいずれかにつながる証明書を提示し、その Subject Alternative Name(SAN)が設定したサーバーアドレスと一致する必要があります。

アップロード先に IP アドレスを使う場合、証明書の SAN にその IP アドレスが正確に含まれる必要があります。DNS 名と IP アドレスが同じサーバーを指しても、両者は一致とはみなされません。

custom

custom は builtin と同じチェーン・ホスト名検証を行いますが、管理者がアップロードした PEM CA 証明書を信頼します。次の場合に使います。

  • サーバー証明書がプライベート CA により発行されている;
  • 自己署名サーバー証明書を使う構成;
  • 必要な公開ルート CA がファームウェアに含まれていない。

プライベート PKI では、そのルート CA 証明書をアップロードしてください。TLS サーバーはハンドシェイク中に必要な中間証明書も送信する必要があります。自己署名サーバー証明書はその証明書を信頼アンカーとしてアップロードできますが、SAN は設定したホスト名または IP アドレスと一致する必要があります。

none

none でも暗号化された TLS 接続は確立されますが、証明書チェーンとホスト名を検証しません。サーバー認証を行わない従来の TLS 動作に相当します。

このモードは中間者攻撃に対して脆弱です。互換性確認や診断のために一時的にのみ使用し、本番環境では builtin または custom を優先してください。

必要条件と重要な適用範囲

TLS CA 設定 API にはローカル Admin Securityの有効化が必要です。すべての要求に、設定済み管理者ユーザー名とパスワードを HTTP Basic Authentication で含めてください。

curl や Swagger UI を実行するコンピューターは機器のローカル IP に接続できる必要があります。MQTTS と HTTPS クライアントは一つの検証モードと一つのカスタム CA を共有するため、変更は機器が使う安全なアップロードモードに適用されます。

TLS 設定変更後は機器を再起動し、外向きクライアントが新しい設定で再作成されるようにしてください。

例では次のプレースホルダーを使います。

DEVICE_IP="192.168.1.80"
ADMIN_USER="admin"
ADMIN_PASSWORD="ExamplePassword1"

実際の機器アドレスと管理者認証情報に置き換えてください。

現在の TLS モードを確認

API:

GET /api/tls/ca/status

例:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  "http://$DEVICE_IP/api/tls/ca/status"

応答例:

{
  "successful": 1,
  "mode": "builtin",
  "customCaValid": 0,
  "customCaLength": 0,
  "customCaSha256": "",
  "restartRequiredAfterChange": 1
}

応答には選択中のモードが表示され、カスタム CA が保存されていれば、その長さと SHA-256 ダイジェストも表示されます。

builtin 検証を選択

API:

POST /api/tls/ca/select

例:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/select" \
  -H "Content-Type: application/json" \
  -d '{"mode":"builtin"}'

成功応答を受けた後、機器を再起動してください。

一時診断用に none を選択

API:

POST /api/tls/ca/select

例:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/select" \
  -H "Content-Type: application/json" \
  -d '{"mode":"none"}'

応答にはサーバー証明書検証が無効になったという警告が含まれます。モード変更後は再起動し、診断後は builtin または custom に戻してください。

カスタム CA をアップロードして選択

CA のアップロードと custom の選択は別々の操作です。アップロードしても有効なモードは自動で変わりません。

カスタム CA ファイルの要件

アップロードするファイルは、次の条件をすべて満たす必要があります。

  • PEM 証明書形式;
  • JSON や multipart/form-data ではなく生の要求本文;
  • Content-Type: application/x-pem-file;
  • PEM ヘッダー、改行、空白を含めて 1~3072 バイト;
  • -----BEGIN CERTIFICATE----- と -----END CERTIFICATE----- を含む;
  • 秘密鍵を含まない。

3072 バイト制限は HTTP 要求本文全体に適用されます。3072 バイトの PEM ファイルは受理され、3073 バイトは拒否されます。

アップロード前にファイルサイズを確認してください。

wc -c root-ca.pem

ステップ 1:CA をアップロード

API:

POST /api/tls/ca/upload

例:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/upload" \
  -H "Content-Type: application/x-pem-file" \
  --data-binary @root-ca.pem

成功応答例:

{
  "successful": 1,
  "length": 1939,
  "sha256": "64-character SHA-256 digest",
  "message": "CA uploaded; select custom mode and restart"
}

機器は CA を複数の KV ブロックに保存し、有効とする前に保存した長さと SHA-256 ダイジェストを検証します。書き込みが中断しても、それまでの有効な CA は置き換わりません。

ステップ 2:custom を選択

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/select" \
  -H "Content-Type: application/json" \
  -d '{"mode":"custom"}'

有効なカスタム CA が保存されていない場合、この要求は拒否されます。通知なく none にフォールバックすることはありません。

ステップ 3:再起動して検証

ローカル Web UI から機器を再起動するか、保護された再起動 API を使います。

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  "http://$DEVICE_IP/api/restart?reset=false"

機器が再接続したら、状態を再度問い合わせます。

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  "http://$DEVICE_IP/api/tls/ca/status"

mode が custom、customCaValid が 1 であり、報告された長さと SHA-256 ダイジェストがアップロードした証明書と一致することを確認してください。

カスタム CA を削除

API:

POST /api/tls/ca/delete

例:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/delete"

カスタム CA を削除するとモードも builtin に戻ります。削除後は機器を再起動してください。

IAMMETER Swagger UI を使用

curl コマンドを手書きせずに同じ API を試せます。

IAMMETER WEM API Test - TLS CA

  1. 機器のローカル IP に接続できるコンピューターで WEM API Test を開きます。
  2. 192.168.1.80 などの機器アドレスを入力し、Apply を選択します。
  3. Authorize を選択し、管理者ユーザー名とパスワードを入力します。
  4. TLS CA - Authenticated グループを開きます。
  5. GET /api/tls/ca/status で現在の設定を確認します。
  6. 必要に応じてアップロード、選択、削除を実行します。
  7. モードや証明書を変更したら機器を再起動します。

Swagger ページはブラウザー内で動作し、そのコンピューターから IAMMETER 機器へ直接要求を送ります。IAMMETER Cloud のプロキシは使わないため、ブラウザーから機器 IP への直接通信が必要です。

証明書検証のトラブルシューティング

admin security required

TLS CA API の使用前に Local Admin Security を有効にしてください。これらの設定は匿名では変更できません。

custom CA is missing or invalid

custom を選ぶ前に有効な PEM CA を正常にアップロードしてください。/api/tls/ca/status を照会し、customCaValid が 1 であることを確認します。

builtin または custom で TLS 接続に失敗

次のすべてを確認してください。

  • 設定したホスト名や IP が証明書 SAN と一致する;
  • 証明書が現在有効で、機器の時刻が正しい;
  • サーバーが必要な中間証明書を送信する;
  • 選択したルート CA がサーバー証明書を発行した、または最終的に信頼している;
  • TLS 設定変更後に機器を再起動した。

none では TLS が動作するが検証モードでは失敗

通常、証明書チェーン、ホスト名、有効期間、機器の時計の問題を示します。none を有効にし続けても認証失敗を隠すだけで解決しません。証明書の配置を修正するか、適切なルート CA をアップロードして custom を使用してください。

トップ