Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Интернет вещей

Безопасная аутентификация устройств с X.509 сертификатами в Eclipse Hono

В последние месяцы медиа-охват подсвечивал небезопасные IoT-устройства, не соответствующие базовым стандартам безопасности. Повторяющаяся забота — конфиденциальность данных, передаваемых от устройств к облачным сервисам. Удивительно, но многие устройства шлют данные через публичные сети нешифрованными, даже если TCP/IP-базированные протоколы вроде HTTP и MQTT поддерживают TLS-шифрование.

Eclipse Hono включил TLS для своих HTTP и MQTT адаптеров с самого начала. 0.9-M2 milestone теперь добавляет поддержку X.509 клиент-сертификатной аутентификации во время TLS-хендшейка, позволяя устройствам использовать пару ключей вместо логина/пароля.

Призыв к разработчикам

Крупнейший в Европе IoT-хакатон возвращается в Берлин 14-15 мая 2023. Присоединяйтесь к 700+ разработчикам в доменно-специфичных вызовах, учитесь, нетворкайте и веселитесь.

В этом гайде мы пройдемся через полный пример: создайте и зарегистрируйте tenant-специфичный trust anchor, сгенерируйте устройственный сертификат, зарегистрируйте его subject DN и используйте сертификат для аутентификации устройства против MQTT-адаптера Hono. Предполагается рабочее знание RSA-криптографии и X.509 концепций (RFC 5280).

Зачем клиентские сертификаты?

Использование паролей требует хранения секрета на устройство в Credentials сервисе Hono, который затем сравнивается с предоставленным устройством паролем. Клиентские сертификаты устраняют потребность в пер-device секретах. Регистрируя единственный trust anchor для тенанта, все устройственные сертификаты могут быть валидированы в TLS-хендшейке с использованием публичного ключа тенанта.

Создание tenant certificate authority

Сгенерируйте RSA ключевую пару тенанта и самоподписанный сертификат. Они будут подписывать все устройственные сертификаты.

$ openssl genrsa -out tenant-key.pem 4096
$ openssl req -x509 -key tenant-key.pem -out tenant-cert.pem -days 365 -subj "/O=ACME Inc./CN=Sensors"

Используйте только стандартные X.500 атрибуты (CN, L, ST, O, OU, C, STREET, DC, UID) чтобы держать DN простым.

Регистрация тенанта

Зарегистрируйте trust anchor с Hono. Следующий пример использует Hono Sandbox (v0.9-M2 или позже). Замените ACME на уникальный tenant ID для вашего инстанса.

$ TENANT="ACME"
$ SUBJECT=$(openssl x509 -in tenant-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//)
$ PK=$(openssl x509 -in tenant-cert.pem -noout -pubkey | sed /^---/d | sed -z 's/\n//g')
$ cat < tenant.json
{
  "tenant-id": "$TENANT",
  "trusted-ca": {
    "subject-dn": "$SUBJECT",
    "public-key": "$PK"
  }
}
EOS
$ curl -i -H "Content-Type: application/json" -H "Expect:" --data-binary @tenant.json https://hono.eclipse.org:28443/tenant

Создание устройственного сертификата

Сгенерируйте устройственную ключевую пару и сертификат, подписанный CA тенанта.

$ openssl genrsa -out device-key.pem 4096
$ openssl req -new -key device-key.pem -subj "\/O=ACME Inc.\/CN=Hot Fuzz Device" | \
openssl x509 -req -days 365 -out device-cert.pem -CA tenant-cert.pem -CAkey tenant-key.pem -CAcreateserial

Регистрация устройства

Зарегистрируйте device ID с тенантом.

$ curl -i -H "Content-Type: application/json" --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$TENANT

Регистрация subject DN устройства

Ассоциируйте subject DN устройственного сертификата с device ID.

$ SUBJECT=$(openssl x509 -in device-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//)
$ cat < credentials.json
{
  "device-id": "hot-fuzz",
  "type": "x509-cert",
  "auth-id": "$SUBJECT",
  "secrets": [{}]
}
EOS
$ curl -i -H "Content-Type: application/json" --data-binary @credentials.json https://hono.eclipse.org:28443/credentials/$TENANT

Тест соединения

Запустите консьюмера для тенанта и опубликуйте телеметрию, используя устройственный сертификат.

# Start consumer
java -jar hono-cli-*-exec.jar \
 --hono.client.host=hono.eclipse.org \
 --hono.client.port=15671 \
 --hono.client.tlsEnabled=true \
 --hono.client.username=consumer@HONO \
 --hono.client.password=verysecret \
 --spring.profiles.active=receiver \
 --tenant.id=$TENANT
# Publish telemetry via MQTT
mosquitto_pub -h hono.eclipse.org -p 8883 \
 --capath /etc/ssl/certs/ \
 --cert device-cert.pem \
 --key device-key.pem \
 -q 1 -t telemetry -m "Hello there"

Если успешно, консоль консьюмера покажет сообщение. Можно также публиковать через HTTP:

curl -i --cert device-cert.pem --key device-key.pem \
 -H "Content-Type: plain/text" -H "Expect:" \
 --data-binary "Hello there" https://hono.eclipse.org:8443/telemetry

Интернет вещей

  1. Теория твердотельных приборов: от физики к практическим приложениям
  2. Eclipse Hono запускает MongoDB-based Device Registry — масштабируемый, production-ready
  3. Eclipse Hono 1.0.0 запускается: унифицированная open-source IoT connectivity платформа
  4. Надёжные решения power-on для батарейных медицинских устройств
  5. Отслеживание достижений в технологии медицинских устройств
  6. Система управления температурой на базе LM35 с микроконтроллером AT89S52
  7. Arm усиливает IoT-коннективность и управление устройствами через покупку Stream Technologies
  8. Уязвимости IoT-устройств exponenруют умный дом атакам: угроза компрометации учетных данных
  9. Неконфигурированные IoT-устройства: скрытая угроза вашему умному дому
  10. Хакинг встроенного железа для IoT-устройств: инструменты, техники и бизнес-импликации