Provisionamento de chaves no modo de desenvolvedor - FreeRTOS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Provisionamento de chaves no modo de desenvolvedor

Importante

Essa página se refere ao repositório do Amazon-FreeRTOS, que está preterido. Recomendamos começar aqui ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o Guia de migração do repositório Github do Amazon FreeRTOS.

Introdução

Esta seção discute duas opções para obter um certificado de cliente X.509 confiável em um dispositivo IoT para testes de laboratório. Dependendo dos recursos do dispositivo, várias operações relacionadas ao provisionamento podem ou não ser compatíveis, incluindo geração de chaves ECDSA integradas, importação de chaves privadas e registro de certificados X.509. Além disso, diferentes casos de uso exigem diferentes níveis de proteção de chaves, desde o armazenamento flash integrado até o uso de hardware criptográfico dedicado. Esta seção fornece lógica para trabalhar nos recursos criptográficos do seu dispositivo.

Opção 1: importação de chaves privadas da AWS IoT

Para fins de testes laboratoriais, se o seu dispositivo permitir a importação de chaves privadas, siga as instruções em Configuração das demonstrações do FreeRTOS.

Opção 2: geração de chaves privadas integradas

Se o seu dispositivo tiver um elemento seguro, ou se preferir gerar o seu próprio par de chaves de dispositivo e certificado, siga estas instruções.

Configuração inicial

Primeiro, execute as etapas em Configuração das demonstrações do FreeRTOS, mas ignore a última etapa (ou seja, ignore Como formatar suas credenciais da AWS IoT). O resultado líquido deve ser que o arquivo demos/include/aws_clientcredential.h foi atualizado com suas configurações, mas o arquivo demos/include/aws_clientcredential_keys.h não.

Configuração do projeto de demonstração

Abra a demonstração da autenticação mútua do coreMQTT conforme descrito no guia da sua placa em Guias de conceitos básicos específicos da placa. No projeto, abra o arquivo aws_dev_mode_key_provisioning.c e altere a definição de keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR, definido como zero por padrão, para um:

#define keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR 1

Depois, compile e execute o projeto de demonstração e continue na próxima etapa.

Extração de chaves públicas

Como o dispositivo não foi provisionado com uma chave privada e um certificado de cliente, a demonstração não será autenticada no AWS IoT. No entanto, a demonstração de autenticação mútua coreMQTT começa executando o provisionamento de chaves em modo de desenvolvedor, resultando na criação de uma chave privada se ainda não estiver presente. Você verá algo parecido com o seguinte perto do início da saída do console serial.

7 910 [IP-task] Device public key, 91 bytes: 3059 3013 0607 2a86 48ce 3d02 0106 082a 8648 ce3d 0301 0703 4200 04cd 6569 ceb8 1bb9 1e72 339f e8cf 60ef 0f9f b473 33ac 6f19 1813 6999 3fa0 c293 5fae 08f1 1ad0 41b7 345c e746 1046 228e 5a5f d787 d571 dcb2 4e8d 75b3 2586 e2cc 0c

Copie as seis linhas de bytes de chave em um arquivo chamado DevicePublicKeyAsciiHex.txt. Depois, use a ferramenta de linha de comando "xxd" para analisar os bytes hexadecimais em binário:

xxd -r -ps DevicePublicKeyAsciiHex.txt DevicePublicKeyDer.bin

Use "openssl" para formatar a chave pública do dispositivo codificado binário (DER) como PEM:

openssl ec -inform der -in DevicePublicKeyDer.bin -pubin -pubout -outform pem -out DevicePublicKey.pem

Não se esqueça de desativar a configuração de geração de chaves temporária ativada acima. Caso contrário, o dispositivo criará mais um par de chaves, e será necessário repetir as etapas anteriores:

#define keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR 0
Configuração da infraestrutura de chave pública

Siga as instruções em Registrar seu certificado de CA a fim de criar uma hierarquia de certificados para seu certificado de laboratório de dispositivos. Pare antes de executar a sequência descrita na seção Criar um certificado de dispositivo usando seu certificado CA.

Nesse caso, o dispositivo não assinará a solicitação de certificado (ou seja, a solicitação de serviço de certificado ou CSR) porque a lógica de codificação X.509 necessária para criar e assinar uma CSR foi excluída dos projetos de demonstração do FreeRTOS para reduzir o tamanho da ROM. Em vez disso, para fins de teste de laboratório, crie uma chave privada em sua estação de trabalho e use-a para assinar a CSR.

openssl genrsa -out tempCsrSigner.key 2048 openssl req -new -key tempCsrSigner.key -out deviceCert.csr

Depois que sua autoridade de certificação tiver sido criada e registrada com a AWS IoT, use o seguinte comando para emitir um certificado de cliente baseado na CSR do dispositivo assinada na etapa anterior:

openssl x509 -req -in deviceCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out deviceCert.pem -days 500 -sha256 -force_pubkey DevicePublicKey.pem

Mesmo que a CSR tenha sido assinada com uma chave privada temporária, o certificado emitido só pode ser usado com a chave privada do dispositivo real. O mesmo mecanismo poderá ser usado na produção se você armazenar a chave do signatário da CSR em hardware separado e configurar sua autoridade de certificação para que ela emita somente certificados para solicitações que foram assinadas por essa chave específica. Essa chave também deverá permanecer sob controle de um administrador designado.

Importação de certificado

Com o certificado emitido, a próxima etapa é importá-lo para o seu dispositivo. Também será necessário importar seu certificado de autoridade de certificação (CA), pois ele é necessário para que a primeira autenticação na AWS IoT seja bem-sucedida ao usar JITP. No arquivo aws_clientcredential_keys.h em seu projeto, defina a macro keyCLIENT_CERTIFICATE_PEM para ser o conteúdo de deviceCert.pem e a macro keyJITR_DEVICE_CERTIFICATE_AUTHORITY_PEM para ser o conteúdo de rootCA.pem.

Autorização do dispositivo

Importe deviceCert.pem para o registro da AWS IoT conforme descrito em Usar seu próprio certificado. Você deve criar uma nova coisa da AWS IoT, associar o certificado PENDENTE e uma política à coisa e, depois, marcar o certificado como ATIVO. Todas essas etapas podem ser executadas manualmente no console da AWS IoT.

Quando o novo certificado de cliente estiver ATIVO e associado a uma coisa e uma política, execute a demonstração de autenticação mútua coreMQTT novamente. Desta vez, a conexão com o agente MQTT da AWS IoT será bem-sucedida.