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.