Crear pares de claves públicas/privadas

En esta página, se explica cómo generar pares de claves públicas/privadas mediante las herramientas de línea de comandos de OpenSSL.

Autenticación del dispositivo

Cloud IoT Core usa autenticación de clave pública (o asimétrica):

  • El dispositivo usa una clave privada para firmar un JSON Web Token (JWT). El token se pasa a Cloud IoT Core como prueba de la identidad del dispositivo.
  • Para verificar la identidad del dispositivo, el servicio usa la clave pública del dispositivo (que se subió antes de que se envíe el JWT).

Cloud IoT Core es compatible con los algoritmos de RSA y de curva elíptica. Para obtener detalles sobre los formatos de claves, consulta Formato de clave pública.

Cómo generar una clave de RSA

Puedes generar un par de claves RSA de 2,048 bits con los siguientes comandos:

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

Con estos comandos, se crea el siguiente par de clave pública/privada:

  • rsa_private.pem: La clave privada que se debe almacenar de forma segura en el dispositivo y usarse para firmar el JWT de autenticación.
  • rsa_public.pem: La clave pública que debe almacenarse en Cloud IoT Core y usarse para verificar la firma del JWT de autenticación.

Genera una clave de RSA con un certificado X.509 autofirmado

Si validas claves con base en certificados a nivel de registro, el certificado debe cumplir ciertos requisitos. Uno de estos requisitos es que el certificado use el estándar X.509.

Para generar una clave privada RSA de 2,048 bits y un certificado X.509 autofirmado con una firma SHA-256, ejecuta el siguiente comando:

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

Puedes reemplazar el argumento -subj por un asunto de certificado real y usar ese certificado, o puedes omitir -subj y proporcionar la información del certificado cuando se te solicite. (Cloud IoT Core no verifica el asunto).

De forma predeterminada, los certificados X.509 vencen 30 días después de la creación. Para establecer la cantidad de días que vencen el certificado, agrega la marca -days <n> durante la creación. Si intentas crear o actualizar un dispositivo con un certificado vencido o tratas de conectar un dispositivo a un registro, y el certificado del registro venció, Cloud IoT Core muestra un error.

Genera claves de curva elíptica

Puedes usar los siguientes comandos para generar un par de claves de curva elíptica P-256:

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

Con estos comandos, se crea el siguiente par de clave pública/privada:

  • ec_private.pem: La clave privada que se debe almacenar de forma segura en el dispositivo y usarse para firmar el JWT de autenticación.
  • ec_public.pem: La clave pública que debe almacenarse en Cloud IoT Core y usarse para verificar la firma del JWT de autenticación.

Genera una clave ES256 con un certificado X.509 autofirmado

Si validas claves con base en certificados a nivel de registro, el certificado debe cumplir con ciertos requisitos que no se tratan en esta página. Uno de estos requisitos es que el certificado use el estándar X.509.

Ejecute los siguientes comandos para generar una clave ES256 con un certificado X.509 autofirmado:

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

Puedes reemplazar el argumento -subj por un asunto de certificado real y usar ese certificado, o puedes omitir -subj y proporcionar la información del certificado cuando se te solicite. (Cloud IoT Core no verifica el asunto).

De forma predeterminada, los certificados X.509 vencen 30 días después de la creación. Para establecer la cantidad de días que vencen el certificado, agrega la marca -days <n> durante la creación. Si intentas crear o actualizar un dispositivo con un certificado vencido o tratas de conectar un dispositivo a un registro, y el certificado del registro venció, Cloud IoT Core muestra un error.

Convierte claves a PKCS8 para Java

En Java, debes convertir las claves privadas al formato PKCS8. Para convertir las claves de RSA y curva elíptica del formato PEM al formato PKCS8, ejecuta los siguientes comandos:

RSA

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

Curva elíptica

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

Administrar claves

Asegúrate de revisar las recomendaciones de seguridad del dispositivo y procura implementar la rotación de claves.

También puedes usar certificados opcionales a nivel de registro para verificar las credenciales de clave.