Creazione di coppie di chiavi pubblica/privata

In questa pagina viene spiegato come generare coppie di chiavi pubblica/privata utilizzando gli strumenti a riga di comando OpenSSL.

Autenticazione dispositivo

Cloud IoT Core utilizza l'autenticazione a chiave pubblica (o asimmetrica):

  • Il dispositivo utilizza una chiave privata per firmare un JSON Web Token (JWT). Il token viene passato a Cloud IoT Core come prova dell'identità del dispositivo.
  • Il servizio utilizza la chiave pubblica del dispositivo (caricata prima dell'invio del JWT) per verificare l'identità del dispositivo.

Cloud IoT Core supporta gli algoritmi RSA e Elliptic Curve. Per maggiori dettagli sui formati delle chiavi, consulta la pagina Formato delle chiavi pubbliche.

Generazione di una chiave RSA

Puoi generare una coppia di chiavi RSA a 2048 bit con i comandi seguenti:

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

Questi comandi creano la seguente coppia di chiavi pubblica/privata:

  • rsa_private.pem: la chiave privata che deve essere archiviata in modo sicuro sul dispositivo e utilizzata per firmare il JWT di autenticazione.
  • rsa_public.pem: la chiave pubblica che deve essere archiviata in Cloud IoT Core e utilizzata per verificare la firma del JWT di autenticazione.

Generazione di una chiave RSA con un certificato X.509 autofirmato

Se riconvalidi le chiavi in base ai certificati a livello di registro, il certificato deve soddisfare determinati requisiti. Uno di questi requisiti è che il certificato utilizzi lo standard X.509.

Per generare una chiave privata RSA a 2048 bit e un certificato X.509 autofirmato con una firma SHA-256, esegui il comando seguente:

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

Puoi sostituire l'argomento -subj con un oggetto certificato reale e utilizzare il certificato oppure puoi omettere -subj e fornire le informazioni sul certificato quando richiesto. Cloud IoT Core non verifica l'oggetto.

Per impostazione predefinita, i certificati X.509 scadono 30 giorni dopo la creazione. Per impostare il numero di giorni di scadenza del certificato, aggiungi il flag -days <n> al momento della creazione. Se tenti di creare o aggiornare un dispositivo con un certificato scaduto o di provare a connettere un dispositivo a un registry e questo è scaduto, Cloud IoT Core restituisce un errore.

Generazione di chiavi a curva ellittica

Per generare una coppia di chiavi con curva ellittica P-256, puoi utilizzare i seguenti comandi:

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

Questi comandi creano la seguente coppia di chiavi pubblica/privata:

  • ec_private.pem: la chiave privata che deve essere archiviata in modo sicuro sul dispositivo e utilizzata per firmare il JWT di autenticazione.
  • ec_public.pem: la chiave pubblica che deve essere archiviata in Cloud IoT Core e utilizzata per verificare la firma del JWT di autenticazione.

Generazione di una chiave ES256 con un certificato X.509 autofirmato

Se riconvalidi le chiavi in base ai certificati a livello di registro, il certificato deve soddisfare determinati requisiti non trattati in questa pagina. Uno di questi requisiti è che il certificato utilizzi lo standard X.509.

Esegui i comandi seguenti per generare una chiave ES256 con un certificato X.509 autofirmato:

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

Puoi sostituire l'argomento -subj con un oggetto certificato reale e utilizzare il certificato oppure puoi omettere -subj e fornire le informazioni del certificato quando richiesto. (Cloud IoT Core non verifica l'oggetto).

Per impostazione predefinita, i certificati X.509 scadono 30 giorni dopo la creazione. Per impostare il numero di giorni di scadenza del certificato, aggiungi il flag -days <n> al momento della creazione. Se tenti di creare o aggiornare un dispositivo con un certificato scaduto o di provare a connettere un dispositivo a un registry e questo è scaduto, Cloud IoT Core restituisce un errore.

Conversione delle chiavi in PKCS8 per Java

In Java, devi convertire le chiavi private nel formato PKCS8. Per convertire le chiavi RSA ed Elliptic Curve dal formato PEM al formato PKCS8, esegui i seguenti comandi:

RSA

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

Curva ellittica

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

Gestione delle chiavi

Assicurati di leggere i consigli per la sicurezza dei dispositivi e di implementare la rotazione chiavi.

Puoi anche utilizzare certificati facoltativi a livello di registro per verificare le credenziali della chiave.