Какой сертификат X.509 использовать для SSL-соединений NodeMCU? - PullRequest
0 голосов
/ 01 октября 2019

Ничего себе, аутентификация SSL подавляющая!

Я использую устройство NodeMCU (ESP8266) для безопасного подключения к концентратору IoT Microsoft Azure с использованием протокола MQTT.

Microsoft предлагает такую ​​возможностьавторизовать клиентов, используя самозаверяющие сертификаты X.509.

Это подробно объясняется здесь: Использование сертификатов X.509 с IoT Hub

Я следовал примеруMicrosoft Azure, используя OpenSSL для генерации моих самозаверяющих сертификатов X.509.

Я пробую пример скрипта Python для тестирования соединения в качестве клиента, используя мои новые сертификаты и , это работает очень хорошо. Итак, я знаю, что процесс прошел успешно, так как он протестирован и работает, и я могу публиковать и подписываться на мой IoT Hub.

Чтобы подключить устройство NodeMCU в качестве клиента к IoT в качестве клиента. Хаб, мне нужно загрузить сертификат для аутентификации. NodeMCU предоставляет возможность загрузки одного сертификата CA (в формате PEM) в операционную систему.

Это задокументировано здесь: Документация NodeMCU TLS

Вопрос в том, какой сертификат мне использовать?

Я пробовал несколько комбинаций из вывода OpenSSL, но ни одна из них не привела к успешному рукопожатию. Я пытаюсь на этом этапе надеяться и смогу сделать что-то от кого-то, кто знает свое дело.

Отрадная новость заключается в том, что NodeMCU распознает сертификаты как сертификаты X.509, но не проходит проверку. Таким образом, это заставляет меня поверить, что у меня загружен неправильный сертификат ...

-0x2700 MBEDTLS_ERR_X509_CERT_VERIFY_FAILED

Не удалось подтвердить сертификат, например CRL, CA или подписьпроверка не удалась.

1 Ответ

0 голосов
/ 28 октября 2019

Для аутентификации клиента с использованием аутентификации X.509 необходимо использовать сертификат и личный ключ RSA на стороне клиента на стороне NodeMCU.

Вы можете поместить отформатированный сертификат PEM и закрытый ключ во флэш-память NodeMCU и загрузить их в SRAM. Рекомендуется заключить сертификат и закрытый ключ в теги "EOF (" ") EOF".

Надеемся, что вы используете ядро ​​Arduino для ESP8266, вы можете использовать BearSSL для форматирования файлов сертификатов длятранспортный слой и связать его с объектом WiFiClientSecure следующим образом:

BearSSL::WiFiClientSecure espClient;

BearSSL::X509List serverCertList(getCertificate());
BearSSL::PrivateKey serverPrivKey(getPrivateKey());
espClient.setClientRSACert(&serverCertList, &serverPrivKey);

где, методы getCertificate () и getPrivateKey (), которые вы должны определить для чтения сертификата из флэш-памяти (или передачи массива символов, содержащего сертификат и закрытый ключ в формате PEM, здесь)вместо). После этого вы сможете аутентифицировать клиента на сервере, если ваш сертификат и закрытый ключ принадлежат действительной цепочке.

...