Аутентификация устройства на основе X.509 в Eclipse Hono
В течение последних нескольких месяцев в средствах массовой информации появлялись сообщения о небезопасных Устройства Интернета вещей, которые не отвечали даже самым элементарным требованиям безопасности. Одной из поднятых проблем была конфиденциальность данных, передаваемых с устройств в облачные сервисы, предоставляемые производителями. Во многих случаях данные передаются по общедоступным сетям в полностью незашифрованном виде, что довольно удивительно, учитывая, что все популярные транспортные протоколы на основе TCP / IP, используемые в современных устройствах IoT (например, HTTP и MQTT), поддерживают согласование и использование безопасный (зашифрованный) транспортный канал с помощью Transport Layer Security (TLS).
Eclipse Hono с самого начала поддерживает использование TLS в своих адаптерах протоколов HTTP и MQTT. Недавно выпущенная веха 0.9-M2 добавила поддержку аутентификации устройств с использованием сертификата клиента X.509 как часть подтверждения TLS как для адаптера HTTP, так и для адаптера MQTT. Это позволяет устройствам использовать пару закрытого / открытого ключей вместо имени пользователя и пароля для аутентификации на адаптерах протокола.
Обращение ко всем разработчикам
Крупнейший в Европе хакатон IoT возвращается в Берлин 14-15 мая 2019 года. Присоединяйтесь к более чем 700 разработчикам в различных проблемах, связанных с хакерскими атаками, чтобы взламывать, играть, учиться, веселиться и заводить новых друзей со всего мира!
Присоединяйтесь к хакатону IoTВ этом сообщении блога я подробно расскажу, как создать и зарегистрировать привязку доверия для конкретного клиента. , создайте сертификат для устройства, зарегистрируйте его отличительное имя субъекта и, наконец, используйте сертификат для аутентификации устройства на адаптере протокола MQTT Hono. В оставшейся части этого поста я предполагаю, что вы имеете общее представление о криптографии на основе RSA и, в частности, о роли, которую играют частные и открытые ключи. Для справки:RFC 5280 определяет все технические детали X.509.
Почему сертификаты клиентов?
При использовании паролей для аутентификации устройств пароль каждого устройства должен быть зарегистрирован в сервисе учетных данных Hono, чтобы адаптеры протокола могли сравнить пароль, представленный устройством во время аутентификации, с записанным хешем пароля.
Одним из преимуществ использования клиентских сертификатов для аутентификации устройств является то, что больше нет необходимости регистрировать индивидуальные секреты (пароли) для устройств в Hono. Вместо этого достаточно зарегистрировать один якорь доверия . для арендатора, который затем можно использовать для проверки идентичности всех устройств, принадлежащих арендатору, как часть рукопожатия TLS. Чтобы это работало, клиентские сертификаты, используемые устройствами, должны содержать цифровую подпись, которая может быть проверена с помощью открытого ключа, который служит якорем доверия клиента.
Создайте центр сертификации клиентов
Поэтому первым шагом является создание пары открытого / закрытого ключей клиента, которая будет использоваться для подписи сертификатов клиента, используемых на устройствах клиента.
$ openssl genrsa -out тенант-ключ.pem 4096 $ openssl req -x509 -key tenant-key.pem -out tenant-cert.pem -days 365 -subj "/ O =ACME Inc./CN=Sensors"Отличительное имя субъекта, заданное с помощью параметра -subj, может содержать любое допустимое отличительное имя X.500. Однако для простоты вам следует воздерживаться от использования любых типов атрибутов, кроме CN, L, ST, O, OU, C, STREET, DC, `UID`.
Зарегистрируйте арендатора
Теперь, когда ключи созданы, мы можем зарегистрировать клиента, используя открытый ключ в качестве якоря доверия.
Для удобства мы будем использовать Песочницу Hono. Однако любая другая (локальная) установка с версией 0.9-M2 или новее также должна работать.
В приведенных ниже командах замените идентификатор клиента ACME на идентификатор по вашему выбору. Это важно, потому что Hono обеспечивает уникальность идентификаторов клиентов. Таким образом, каждый идентификатор может быть зарегистрирован только один раз для каждого экземпляра Hono.
Первые три команды определяют некоторые переменные для дальнейшего использования:идентификатор клиента, отличительное имя субъекта сертификата и открытый ключ в кодировке Base64. Затем переменные используются в команде для регистрации якоря доверия с новым клиентом.
$ 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 <Создайте сертификат устройства
Следующим шагом является создание пары ключей для устройства и соответствующего ему клиентского сертификата, подписанного закрытым ключом клиента.
$ openssl genrsa -out устройство-ключ.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Опять же, убедитесь, что вы не используете в теме какие-либо атрибуты кроме CN, L, ST, O, OU, C, STREET, DC, UID. отличительное имя.
Зарегистрируйте устройство
Теперь мы можем использовать произвольный идентификатор устройства для регистрации устройства у клиента.
$ curl -i -H 'Content-Type:application / json' --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$ АРЕНДАТОРЗарегистрируйте DN объекта устройства
Последний шаг - зарегистрировать отличительное имя устройства. Опять же, убедитесь, что вы используете те же идентификаторы клиента и устройства, что и выше.
$ SUBJECT =$ (openssl x509 -in device-cert.pem -noout -subject -nameopt RFC2253 | sed s / ^ subject =//) $ cat <Проверить соединение
Теперь, когда устройство зарегистрировано, пора подключиться к адаптеру MQTT, используя только что созданный сертификат клиента, и опубликовать некоторые данные.
Сначала мы запускаем потребителя для клиента, для которого зарегистрировали устройство. Вы можете загрузить клиент с веб-сайта Hono:
$ java -jar hono-cli - * - exec.jar --hono.client.host =hono.eclipse.org --hono.client.port =15671 --hono.client.tlsEnabled =true --hono.client. имя пользователя =потребитель @ HONO --hono.client.password =verysecret --spring.profiles.active =получатель --tenant.id =$ TENANTНа последнем этапе мы используем клиент командной строки Eclipse Mosquitto для публикации некоторых данных телеметрии:
$ 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 "Здравствуйте!"Если все пойдет хорошо, вы сможете увидеть, как данные записываются в консоль в терминале, с которого вы запустили потребителя.
Устройство также может использовать HTTP для публикации данных:
$ curl -i --cert device-cert.pem --key device-key.pem -H 'Content-Type:plain / text' -H 'Expect:' --data-binary 'Здравствуйте! https:// hono.eclipse.org:8443/telemetry
Интернет вещей
- Введение в теорию твердотельных устройств
- Выпуск нового реестра устройств на основе MongoDB в Eclipse Hono
- Выпущено Eclipse Hono 1.0.0:открытая платформа для подключения к Интернету вещей
- Надежное включение медицинского устройства с батарейным питанием
- Мониторинг продвижения медицинского устройства
- Система управления устройством на основе температуры с использованием LM35
- Arm расширяет возможности подключения к Интернету вещей и управления устройствами с приобретением Stream Technologies
- Уязвимости приложений делают устройства IoT открытыми для атак
- Установить и забыть:угроза, исходящая от ненастроенного Интернета вещей
- Введение во взлом встроенного оборудования устройств Интернета вещей