Цифровая подпись открытого ключа устройства сертификатом CA - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь зарегистрировать устройство IoT в Google Cloud IoT Core, и у меня возникают проблемы при подписании открытого ключа устройства с помощью сертификата CA, установленного в Google Cloud (реестр устройства).

Ниже приведеныТребования Google:

  • CA и сертификаты устройства должны быть X.509v3, закодированы в base64, завернуты в ----- BEGIN CERTIFICATE ----- и ----- END CERTIFICATE-----.
  • Сертификаты CA не должны быть самоподписанными («корневой CA»);сертификат устройства должен быть подписан конкретным сертификатом CA на уровне реестра.
  • Открытые ключи устройства, которые не подписаны сертификатами уровня реестра, отклоняются Cloud IoT Core.
  • CA и устройствосертификаты должны быть в формате PEM

После прохождения предыдущих ответов в StackOverflow и в других местах, это то, что я пробовал до сих пор (используя файл конфигурации по умолчанию):

Вариант 1

  1. openssl req -x509 -nodes -newkey rsa: 2048 -days 365 -keyout ca.key -out ca.crt -subj "/ CN = не используется"
  2. openssl req -nodes-newkey rsa: 2048 -days 365 -keyout device.key -out device.csr -subj "/ CN = не используется"
  3. openssl x509 -req -days 365 -in device.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out device.crt

Опция 2

  1. openssl req -new -x509 -nodes -days 365 -newkey rsa: 2048 -keyout ca.key -out ca.crt -subj "/ CN = не используется"
  2. openssl genrsa -out device.key 2048
  3. openssl req -new -days 365 -key device.key -out device.csr -subj "/ CN = не используется"
  4. openssl x509 -req -days 365 -in device.csr -CA ca.crt -CAkey ca.key-CAcreateserial -out device.crt

Сертификаты создаются отлично в обоих случаях, но когда я пытаюсь зарегистрировать устройство с этим сертификатом, я получаю сообщение об ошибке, указывающее, что сертификат устройства не может бытьпроверено сертификатом CA.

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

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Спасибо за ответы.Мне нужен сертификат реестра, чтобы гарантировать, что мошеннические устройства не зарегистрированы.После нескольких часов проб и ошибок, это в конечном итоге сработало, когда я указал допустимый subj вместо "/ CN = unused".К сожалению, в документации Google не указано, что это может быть проблемой.Хотя процедура подписания была правильной.

0 голосов
/ 08 февраля 2019

Вариант 1 выглядит правильно, как здесь упоминается: https://cloud.google.com/iot/docs/how-tos/credentials/keys.

Похоже, у вас указан сертификат уровня реестра.

Это означает, что помимо созданияКак и у пары ключей, вам также необходимо зарегистрировать открытый ключ с помощью сертификата, указанного на уровне реестра.Это действительно сбивает с толку IMO и в большинстве случаев не нужно.

Если вам не нужно иметь его по соображениям безопасности, специфичным для вашей настройки, удалите любой имеющийся у вас сертификат уровня реестра и просто зарегистрируйте устройство с созданными ключами.

Если это не так, убедитесь, что при создании устройства вы указываете ключ RSA с оболочкой x509 (есть варианты для RS256, ES256, RS256_X509, ES256_X509).Я определенно делал это раньше, где у меня было это с X509, но указал RSA случайно.

...