Exercício - Gerar e configurar um certificado de autoridade de certificação X.509 usando OpenSSL
Neste exercício, você gera um certificado de CA X.509 usando OpenSSL no Azure Cloud Shell e, em seguida, cria um grupo de registro em sua instância do Serviço de Provisionamento de Dispositivo (DPS) para dispositivos IoT provisionarem usando a autenticação X.509.
Este certificado de autoridade de certificação X.509 é usado para assinar os certificados de dispositivo para cada dispositivo neste grupo de registro. O grupo de inscrição no DPS só precisa de uma cópia deste certificado de CA superior. Quando um dispositivo se conecta ao DPS para provisionamento, ele apresenta sua cadeia de certificados de autoridade que mostra seu certificado de dispositivo, quaisquer certificados intermediários e o certificado de CA superior.
Tarefa 1: Gerar certificados de autoridade de certificação raiz e intermediária
Nesta seção, você gera um certificado de autoridade de certificação X.509 usando OpenSSL. Este certificado é usado para configurar um registro de grupo no DPS.
Na área restrita do Azure, crie um diretório chamado certificados e mova para um novo diretório usando os seguintes comandos:
mkdir certificates cd certificates
Baixe um script auxiliar e dois arquivos de configuração OpenSSL que você usa para criar certificados X.509.
Transferir ficheiros
curl https://raw.githubusercontent.com/Azure/azure-iot-sdk-c/main/tools/CACertificates/certGen.sh --output certGen.sh curl https://raw.githubusercontent.com/Azure/azure-iot-sdk-c/main/tools/CACertificates/openssl_device_intermediate_ca.cnf --output openssl_device_intermediate_ca.cnf curl https://raw.githubusercontent.com/Azure/azure-iot-sdk-c/main/tools/CACertificates/openssl_root_ca.cnf --output openssl_root_ca.cnf
Atualize as permissões de script para que um usuário possa ler, gravar e executá-lo.
chmod 700 certGen.sh
O script auxiliar e os arquivos de suporte são hospedados no projeto de código aberto Azure/azure-iot-sdk-c hospedado no GitHub, que é um componente do SDK de Dispositivo IoT do Azure. O certGen.sh script auxiliar fornece a você a chance de ver como os certificados de CA são usados sem se aprofundar muito nas especificidades da configuração do OpenSSL (que está fora do escopo deste módulo).
Para obter mais instruções sobre como usar esse script auxiliar e sobre como usar o PowerShell em vez do Bash, consulte: Gerenciando certificados de CA de teste para exemplos e tutoriais
Aviso
Os certificados criados por este script auxiliar NÃO DEVEM ser usados para produção. Contêm palavras-passe codificadas ("1234"), expiram após 30 dias e são fornecidas apenas para fins de demonstração. Ao usar certificados de CA em produção, certifique-se de aplicar as práticas recomendadas de segurança da sua empresa para a criação de certificados e o gerenciamento do tempo de vida.
Se estiver interessado, você pode ler rapidamente o conteúdo do arquivo de script que você baixou usando o
cat
comando.cat certGen.sh
Digite o seguinte comando para gerar os certificados raiz e intermediário:
./certGen.sh create_root_and_intermediate
Observe que você executou o script com a opção create_root_and_intermediate . Este comando pressupõe que você esteja executando o script de dentro do diretório ~/certificates .
Esse comando gerou um certificado de autoridade de certificação raiz chamado azure-iot-test-only.root.ca.cert.pem e o colocou em um diretório ./certs (sob o diretório de certificados que você criou).
Tarefa 2: Criar um registro de grupo (certificado X.509) no DPS
Na área restrita do Azure, carregue seu certificado de CA na instância do Serviço de Provisionamento de Dispositivo. O nome do certificado é
groupCA-sensors
. Overified true
parâmetro de comando permite que o certificado seja verificado automaticamente no upload, ignorando a necessidade de uma etapa extra para a geração da prova de posse do certificado.az iot dps certificate create --dps-name dps-$suffix --certificate-name groupCA-sensors --path ~/certificates/certs/azure-iot-test-only.root.ca.cert.pem --verified true
Crie um grupo de inscrição em sua instância do DPS.
az iot dps enrollment-group create --dps-name dps-$suffix --enrollment-id enrollgroup-sensors --root-ca-name groupCA-sensors --iot-hubs hub-$suffix.azure-devices.net --initial-twin-properties "{'telemetryDelay':'1'}" --allocation-policy static
Este comando cria um grupo de inscrição com os seguintes parâmetros:
Parâmetro Description --dps-name
O identificador DPS. --enrollment-id
O nome do novo grupo de inscrição. --root-ca-name
Define o método de atestado para o grupo de inscrição como certificados assinados por CA X.509 e aponta para o certificado de autoridade de certificação que você carregou no DPS. --iot-hubs
Configura o DPS para provisionar os dispositivos neste grupo de registro para o hub IoT que você criou e vinculou ao DPS no início deste módulo. --initial-twin-properties
Define uma propriedade desejada que todos os dispositivos neste grupo de inscrição recebem depois de provisionados. Os dispositivos usam a propriedade properties.desired.telemetryDelay para definir o atraso de tempo para leitura e envio de telemetria para o Hub IoT. allocation-policy
Usado para determinar como um dispositivo é atribuído a um Hub IoT. Uma política estática permite designar um único hub IoT ao qual você deseja atribuir dispositivos.
Verifique o seu trabalho
Verifique se o arquivo raiz da autoridade de certificação azure-iot-test-only.root.ca.cert.pem foi criado na pasta /certs.
dir ~/certificates/certs/
Verifique se o certificado da autoridade de certificação foi carregado para sua instância do Serviço de Provisionamento de Dispositivo (DPS).
az iot dps certificate show --certificate-name groupCA-sensors --dps-name dps-$suffix
Examine as informações de retorno do comando. Verifique se o nome do certificado da autoridade de certificação é
groupCA-sensors
o mostrado aqui."name": "groupCA-sensors"
Examine este comando retornar informações para verificar se o grupo de registro DPS foi criado com os parâmetros especificados na
az iot dps certificate create
instrução na tarefa 2, etapa 2.az iot dps enrollment-group show --dps-name dps-$suffix --enrollment-id enrollgroup-sensors