O Google Cloud IoT Core será desativado em 16 de agosto de 2023. Entre em contato com sua equipe de conta do Google Cloud para mais informações.

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.