Créer des paires de clés publique/privée

Cette page explique comment générer des paires de clés publique/privée à l'aide des outils de ligne de commande OpenSSL.

Authentification de l'appareil

Cloud IoT Core utilise l'authentification par clé publique (ou asymétrique) :

  • L'appareil utilise une clé privée pour signer un jeton Web JSON (JWT). Le jeton est transmis à Cloud IoT Core comme preuve de l'identité de l'appareil.
  • Le service vérifie l'identité de l'appareil à l'aide de la clé publique de l'appareil (importée avant l'envoi du jeton JWT).

Cloud IoT Core est compatible avec les algorithmes RSA et à courbe elliptique. Pour en savoir plus sur les formats de clés, consultez la section Format de clé publique.

Générer une clé RSA

Vous pouvez générer une paire de clés RSA de 2 048 bits à l'aide des commandes suivantes :

openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem

Ces commandes créent la paire de clés publique/privée suivante :

  • rsa_private.pem : clé privée qui doit être stockée de manière sécurisée sur l'appareil et utilisée pour signer le jeton d'authentification JWT.
  • rsa_public.pem : clé publique à stocker dans Cloud IoT Core et utilisée pour vérifier la signature du jeton JWT d'authentification.

Générer une clé RSA avec un certificat X.509 autosigné

Si vous validez des clés par rapport aux certificats au niveau du registre, celui-ci doit répondre à certaines exigences. L'une de ces exigences est que le certificat utilise la norme X.509.

Pour générer une clé privée RSA 2048 bits et un certificat X.509 autosigné avec une signature SHA-256, exécutez la commande suivante :

openssl req -x509 -nodes -newkey rsa:2048 -keyout rsa_private.pem \
    -out rsa_cert.pem -subj "/CN=unused"

Vous pouvez remplacer l'argument -subj par un objet de certificat réel et utiliser ce certificat, ou omettre -subj et fournir les informations de certificat lorsque vous y êtes invité. (Cloud IoT Core ne vérifie pas l'objet.)

Par défaut, les certificats X.509 expirent 30 jours après leur création. Pour définir le nombre de jours avant l'expiration du certificat, ajoutez l'option -days <n> au moment de la création. Si vous essayez de créer ou de mettre à jour un appareil avec un certificat arrivé à expiration, ou de connecter un appareil à un registre et que le certificat a expiré, Cloud IoT Core affiche une erreur.

Générer une clé à courbe elliptique

Vous pouvez utiliser les commandes suivantes pour générer une paire de clés à courbe elliptique P-256 :

openssl ecparam -genkey -name prime256v1 -noout -out ec_private.pem
openssl ec -in ec_private.pem -pubout -out ec_public.pem

Ces commandes créent la paire de clés publique/privée suivante :

  • ec_private.pem : clé privée qui doit être stockée de manière sécurisée sur l'appareil et utilisée pour signer le jeton d'authentification JWT.
  • ec_public.pem : clé publique à stocker dans Cloud IoT Core et utilisée pour vérifier la signature du jeton JWT d'authentification.

Générer une clé ES256 avec un certificat X.509 autosigné

Si vous validez des clés par rapport à des certificats de niveau registre, le certificat doit répondre à certaines exigences supplémentaires qui ne sont pas traitées sur cette page. L'une de ces exigences est que le certificat utilise la norme X.509.

Exécutez les commandes suivantes pour générer une clé ES256 avec un certificat X.509 autosigné :

openssl req -x509 -new -key ec_private.pem -out ec_cert.pem -subj "/CN=unused"

Vous pouvez remplacer l'argument -subj par un objet de certificat réel et utiliser ce certificat, ou omettre -subj et fournir les informations de certificat lorsque vous y êtes invité. (Cloud IoT Core ne vérifie pas l'objet.)

Par défaut, les certificats X.509 expirent 30 jours après leur création. Pour définir le nombre de jours avant l'expiration du certificat, ajoutez l'option -days <n> au moment de la création. Si vous essayez de créer ou de mettre à jour un appareil avec un certificat arrivé à expiration, ou de connecter un appareil à un registre et que le certificat a expiré, Cloud IoT Core affiche une erreur.

Convertir des clés au format PKCS8 pour Java

Dans Java, vous devez convertir les clés privées au format PKCS8. Pour convertir les clés RSA et à courbe elliptique du format PEM au format PKCS8, exécutez les commandes suivantes :

RSA

openssl pkcs8 -topk8 -inform PEM -outform DER -in rsa_private.pem \
    -nocrypt > rsa_private_pkcs8

Courbe elliptique

openssl pkcs8 -topk8 -inform PEM -outform DER -in ec_private.pem \
    -nocrypt > ec_private_pkcs8

Gérer des clés

Veillez à consulter les recommandations sur la sécurité des appareils et à envisager la mise en œuvre de la rotation des clés.

Vous pouvez également utiliser des certificats facultatifs au niveau du registre pour vérifier les identifiants de clé.