Como criar pares de chaves públicas/privadas

Nesta página, explicamos como gerar pares de chaves públicas/privadas usando as ferramentas de linha de comando OpenSSL.

Autenticação do dispositivo

O Cloud IoT Core usa a autenticação de chave pública (ou assimétrica):

  • O dispositivo usa uma chave privada para assinar um JSON Web Token (JWT). O token é transmitido para o Cloud IoT Core como prova da identidade do dispositivo.
  • O serviço usa a chave pública do dispositivo (enviada antes do envio do JWT) para verificar a identidade do dispositivo.

O Cloud IoT Core é compatível com os algoritmos RSA e de curva elíptica. Para detalhes sobre formatos de chave, consulte Formato de chave pública.

Como gerar uma chave RSA

É possível gerar um par de chaves RSA de 2048 bits com os seguintes 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

Esses comandos criam o seguinte par de chaves pública/privada:

  • rsa_private.pem: a chave privada que precisa ser armazenada com segurança no dispositivo e usada para assinar o JWT de autenticação.
  • rsa_public.pem: a chave pública que precisa ser armazenada no Cloud IoT Core e usada para verificar a assinatura do JWT de autenticação.

Como gerar uma chave RSA com um certificado X.509 autoassinado

Se você estiver validando chaves em relação a certificados no nível de registro, o certificado precisará atender a determinados requisitos. Um desses requisitos é que o certificado use o padrão X.509.

Para gerar uma chave privada RSA de 2.048 bits e um certificado X.509 autoassinado com uma assinatura SHA-256, execute o seguinte comando:

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

Você pode substituir o argumento -subj por um assunto real do certificado e usar esse certificado ou pode omitir -subj e fornecer as informações do certificado quando solicitado. O Cloud IoT Core não verifica o assunto.

Por padrão, os certificados X.509 expiram 30 dias após a criação. Para definir o número de dias até o certificado expirar, adicione a sinalização -days <n> no momento da criação. Se você tentar criar ou atualizar um dispositivo com um certificado expirado ou tentar conectar um dispositivo a um registro e o certificado do registro tiver expirado, o Cloud IoT Core retornará um erro.

Como gerar chaves de curva elíptica

Use os seguintes comandos para gerar um par de chaves 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

Esses comandos criam o seguinte par de chaves pública/privada:

  • ec_private.pem: a chave privada que precisa ser armazenada com segurança no dispositivo e usada para assinar o JWT de autenticação.
  • ec_public.pem: a chave pública que precisa ser armazenada no Cloud IoT Core e usada para verificar a assinatura do JWT de autenticação.

Como gerar uma chave ES256 com um certificado X.509 autoassinado

Se você estiver validando chaves em relação a certificados no nível de registro, o certificado precisará atender a outros requisitos extras não mencionados nesta página. Um desses requisitos é que o certificado use o padrão X.509.

Execute os seguintes comandos para gerar uma chave ES256 com um certificado X.509 autoassinado:

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

É possível substituir o argumento -subj por um assunto real do certificado e usar esse certificado ou omitir -subj e fornecer as informações do certificado quando solicitado. O Cloud IoT Core não verifica o assunto.

Por padrão, os certificados X.509 expiram 30 dias após a criação. Para definir o número de dias até o certificado expirar, adicione a sinalização -days <n> no momento da criação. Se você tentar criar ou atualizar um dispositivo com um certificado expirado ou tentar conectar um dispositivo a um registro e o certificado do registro tiver expirado, o Cloud IoT Core retornará um erro.

Como converter chaves em PKCS8 para Java

Em Java, você precisa converter chaves privadas no formato PKCS8. Para converter chaves RSA e de curva elíptica do formato PEM no formato PKCS8, execute os seguintes comandos:

RSA

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

Elliptic Curve

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

Como gerenciar chaves

Revise as recomendações de segurança do dispositivo e considere implementar a rotação de chaves.

Também é possível usar certificados opcionais no nível de registro para verificar as credenciais de chave.