Tutorial: Configurar o Registro pelo Servidor de Transporte Seguro para o Azure IoT Edge
Aplica-se a: IoT Edge 1.5 IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e IoT Edge 1.4 LTS são versões suportadas. O IoT Edge 1.4 LTS termina a vida útil em 12 de novembro de 2024. Se tiver uma versão anterior, consulte Atualizar IoT Edge.
Com o Azure IoT Edge, você pode configurar seus dispositivos para usar um servidor de Registro sobre Transporte Seguro (EST) para gerenciar certificados x509.
Este tutorial orienta você na hospedagem de um servidor EST de teste e na configuração de um dispositivo IoT Edge para o registro e a renovação de certificados x509. Neste tutorial, irá aprender a:
- Criar e hospedar um servidor EST de teste
- Configurar o registro do grupo DPS
- Configurar dispositivo
Pré-requisitos
- Um dispositivo IoT Edge existente com o tempo de execução mais recente do Azure IoT Edge instalado. Se você precisar criar um dispositivo de teste, conclua Guia de início rápido: implante seu primeiro módulo IoT Edge em um dispositivo Linux virtual.
- Seu dispositivo IoT Edge requer o tempo de execução do Azure IoT Edge 1.2 ou posterior para suporte a EST. O tempo de execução do Azure IoT Edge 1.3 ou posterior é necessário para a renovação do certificado EST.
- DPS (Serviço de Provisionamento de Dispositivos) do Hub IoT vinculado ao Hub IoT. Para obter informações sobre como configurar o DPS, consulte Guia de início rápido: configurar o Serviço de Provisionamento de Dispositivo do Hub IoT com o portal do Azure.
O que é Inscrição em Transporte Seguro?
O registro por Transporte Seguro (EST) é um protocolo criptográfico que automatiza a emissão de certificados x.509. Ele é usado para clientes PKI (infraestrutura de chave pública), como o IoT Edge, que precisam de certificados de cliente associados a uma Autoridade de Certificação (CA). O EST substitui a necessidade de gerenciamento manual de certificados, que pode ser arriscado e propenso a erros.
Servidor EST
Para emissão e renovação de certificados, você precisa de um servidor EST acessível aos seus dispositivos.
Importante
Para soluções de nível empresarial, considere: GlobalSign IoT Edge Enroll ou DigiCert IoT Device Manager.
Para teste e desenvolvimento, você pode usar um servidor EST de teste. Neste tutorial, criaremos um servidor EST de teste.
Executar o servidor EST no dispositivo
Para começar rapidamente, este tutorial mostra as etapas para implantar um servidor EST simples em um contêiner localmente no dispositivo IoT Edge. Este método é a abordagem mais simples para experimentá-lo.
O Dockerfile usa o Ubuntu 18.04, uma biblioteca da Cisco chamada libest
, e código de servidor de exemplo. Ele é configurado com a seguinte configuração que você pode alterar:
- CA raiz válida por 20 anos
- Certificado de servidor EST válido por 10 anos
- Defina os dias padrão do certificado como 1 para testar a renovação EST
- O servidor EST é executado localmente no dispositivo IoT Edge em um contêiner
Atenção
Não use este Dockerfile na produção.
Conecte-se ao dispositivo, por exemplo, usando SSH, onde você instalou o IoT Edge.
Crie um arquivo chamado
Dockerfile
(diferencia maiúsculas de minúsculas) e adicione o conteúdo de exemplo usando seu editor de texto favorito.Gorjeta
Se você quiser hospedar seu servidor EST na Instância de Contêiner do Azure, altere
myestserver.westus.azurecontainer.io
para o nome DNS do seu servidor EST. Ao escolher um nome DNS, lembre-se de que o rótulo DNS de uma instância do Contêiner do Azure deve ter pelo menos cinco caracteres.# DO NOT USE IN PRODUCTION - Use only for testing # FROM ubuntu:18.04 RUN apt update && apt install -y apache2-utils git openssl libssl-dev build-essential && \ git clone https://github.com/cisco/libest.git && cd libest && \ ./configure --disable-safec && make install && \ rm -rf /src && apt remove --quiet -y libssl-dev build-essential && \ apt autoremove -y && apt clean -y && apt autoclean -y && \ rm -rf /var/lib/apt /tmp/* /var/tmp/* WORKDIR /libest/example/server/ # Setting the root CA expiration to 20 years RUN sed -i "s|-days 365|-days 7300 |g" ./createCA.sh ## If you want to host your EST server remotely (for example, an Azure Container Instance), ## change myestserver.westus.azurecontainer.io to the fully qualified DNS name of your EST server ## OR, change the IP address ## and uncomment the corresponding line. # RUN sed -i "s|DNS.2 = ip6-localhost|DNS.2 = myestserver.westus.azurecontainer.io|g" ./ext.cnf # RUN sed -i "s|IP.2 = ::1|IP.2 = <YOUR EST SERVER IP ADDRESS>|g" ./ext.cnf # Set EST server certificate to be valid for 10 years RUN sed -i "s|-keyout \$EST_SERVER_PRIVKEY -subj|-keyout \$EST_SERVER_PRIVKEY -days 7300 -subj |g" ./createCA.sh # Create the CA RUN echo 1 | ./createCA.sh # Set cert default-days to 1 to show EST renewal RUN sed -i "s|default_days = 365|default_days = 1 |g" ./estExampleCA.cnf # The EST server listens on port 8085 by default # Uncomment to change the port to 443 or something else. If changed, EXPOSE that port instead of 8085. # RUN sed -i "s|estserver -c|estserver -p 443 -c |g" ./runserver.sh EXPOSE 8085 CMD ./runserver.sh
No diretório que contém
Dockerfile
o , construa sua imagem a partir do Dockerfile de exemplo.sudo docker build . --tag est
Inicie o contêiner e exponha a porta 8085 do contêiner à porta 8085 no host.
sudo docker run -d -p 8085:8085 est
Agora, seu servidor EST está em execução e pode ser acessado usando
localhost
a porta 8085. Verifique se ele está disponível executando um comando para ver o certificado do servidor.openssl s_client -showcerts -connect localhost:8085
Você deve ver
-----BEGIN CERTIFICATE-----
no meio da saída. A recuperação do certificado verifica se o servidor está acessível e pode apresentar seu certificado.
Gorjeta
Para executar esse contêiner na nuvem, crie a imagem e envie a imagem por push para o Registro de Contêiner do Azure. Em seguida, siga o início rápido para implantar na Instância de Contêiner do Azure.
Baixar certificado de autoridade de certificação
Cada dispositivo requer o certificado de Autoridade de Certificação (CA) associado a um certificado de identidade de dispositivo.
No dispositivo IoT Edge, crie o
/var/aziot/certs
diretório se ele não existir e altere o diretório para ele.# If the certificate directory doen't exist, create, set ownership, and set permissions sudo mkdir -p /var/aziot/certs sudo chown aziotcs:aziotcs /var/aziot/certs sudo chmod 755 /var/aziot/certs # Change directory to /var/aziot/certs cd /var/aziot/certs
Recupere o certificado da autoridade de certificação do servidor EST no
/var/aziot/certs
diretório e nomeie-ocacert.crt.pem
.openssl s_client -showcerts -verify 5 -connect localhost:8085 < /dev/null | sudo awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' && sudo cp cert2.pem cacert.crt.pem
Os certificados devem pertencer aos aziotcs do usuário do serviço de chave. Defina a propriedade como aziotcs para todos os arquivos de certificado e defina permissões. Para obter mais informações sobre a propriedade e as permissões do certificado, consulte Requisitos de permissão.
# Give aziotcs ownership to certificates sudo chown -R aziotcs:aziotcs /var/aziot/certs # Read and write for aziotcs, read-only for others sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
Provisionar dispositivo IoT Edge usando DPS
O uso do Serviço de Provisionamento de Dispositivos permite que você emita e renove certificados automaticamente de um servidor EST no IoT Edge. Ao usar o servidor EST tutorial, os certificados de identidade expiram em um dia, tornando o provisionamento manual com o Hub IoT impraticável, já que cada vez que o certificado expira, a impressão digital deve ser atualizada manualmente no Hub IoT. A autenticação de CA do DPS com grupo de inscrição permite que os certificados de identidade do dispositivo sejam renovados sem etapas manuais.
Carregar certificado de autoridade de certificação para DPS
Se você não tiver um Serviço de Provisionamento de Dispositivo vinculado ao Hub IoT, consulte Guia de início rápido: configurar o Serviço de Provisionamento de Dispositivo do Hub IoT com o portal do Azure.
Transfira o
cacert.crt.pem
arquivo do seu dispositivo para um computador com acesso ao portal do Azure, como o computador de desenvolvimento. Uma maneira fácil de transferir o certificado é conectar-se remotamente ao seu dispositivo, exibir o certificado usando o comandocat /var/aziot/certs/cacert.crt.pem
, copiar toda a saída e colar o conteúdo em um novo arquivo no computador de desenvolvimento.No portal do Azure, navegue até sua instância do Serviço de Provisionamento de Dispositivo do Hub IoT.
Em Configurações, selecione Certificados e, em seguida , +Adicionar.
Definição Value Nome do certificado Forneça um nome amigável para o certificado da autoridade de certificação Certificado .pem ou arquivo .cer Navegue até a cacert.crt.pem
partir do servidor ESTDefinir o status do certificado como verificado ao carregar Selecione a caixa de verificação Selecione Guardar.
Criar grupo de inscrição
No portal do Azure, navegue até sua instância do Serviço de Provisionamento de Dispositivo do Hub IoT.
Em Configurações, selecione Gerenciar inscrições.
Selecione Adicionar grupo de inscrição e conclua as etapas a seguir para configurar o registro.
Na guia Registro + provisionamento, escolha as seguintes configurações:
Definição Value Mecanismo de certificação Selecione certificados X.509 carregados para esta instância do Serviço de Provisionamento de Dispositivo Certificado primário Escolha seu certificado na lista suspensa Group name Forneça um nome amigável para esta inscrição de grupo Status de provisionamento Marque a caixa de seleção Habilitar este registro Na guia Hubs IoT, escolha seu Hub IoT na lista.
Na guia Configurações do dispositivo , marque a caixa de seleção Habilitar o IoT Edge em dispositivos provisionados.
As outras configurações não são relevantes para o tutorial. Pode aceitar as predefinições.
Selecione Rever + criar.
Agora que existe um registro para o dispositivo, o tempo de execução do IoT Edge pode gerenciar automaticamente certificados de dispositivo para o Hub IoT vinculado.
Configurar dispositivo IoT Edge
No dispositivo IoT Edge, atualize o arquivo de configuração do IoT Edge para usar certificados de dispositivo do servidor EST.
Abra o arquivo de configuração do IoT Edge usando um editor. Por exemplo, use o
nano
editor para abrir o/etc/aziot/config.toml
arquivo.sudo nano /etc/aziot/config.toml
Adicione ou substitua as seguintes seções no arquivo de configuração. Essas definições de configuração usam autenticação de nome de usuário e senha inicialmente para obter o certificado de dispositivo do servidor EST. O certificado de dispositivo é usado para autenticar no servidor EST para futuras renovações de certificado.
Substitua o seguinte texto de espaço reservado:
<DPS-ID-SCOPE>
com o Escopo de ID do DPS vinculado ao Hub IoT que contém o dispositivo registrado emyiotedgedevice
com a ID do dispositivo registrada no Hub IoT do Azure. Você pode encontrar o valor ID Scope na página Visão geral do DPS.# DPS provisioning with X.509 certificate # Replace with ID Scope from your DPS [provisioning] source = "dps" global_endpoint = "https://global.azure-devices-provisioning.net" id_scope = "<DPS-ID-SCOPE>" [provisioning.attestation] method = "x509" registration_id = "myiotedgedevice" [provisioning.attestation.identity_cert] method = "est" common_name = "myiotedgedevice" # Auto renewal settings for the identity cert # Available only from IoT Edge 1.3 and above [provisioning.attestation.identity_cert.auto_renew] rotate_key = false threshold = "80%" retry = "4%" # Trusted root CA certificate in the global EST options # Optional if the EST server's TLS certificate is already trusted by the system's CA certificates. [cert_issuance.est] trusted_certs = [ "file:///var/aziot/certs/cacert.crt.pem", ] # The default username and password for libest # Used for initial authentication to EST server # # Not recommended for production [cert_issuance.est.auth] username = "estuser" password = "estpwd" [cert_issuance.est.urls] default = "https://localhost:8085/.well-known/est"
Nota
Neste exemplo, o IoT Edge usa nome de usuário e senha para autenticar no servidor EST sempre que ele precisa obter um certificado. Esse método não é recomendado na produção porque 1) requer o armazenamento de um segredo em texto sem formatação e 2) o IoT Edge deve usar um certificado de identidade para autenticar no servidor EST também. Para modificar para produção:
- Considere o uso de certificados de inicialização de longa duração que podem ser armazenados no dispositivo durante a fabricação, semelhante à abordagem recomendada para DPS. Para ver como configurar o certificado de bootstrap para o servidor EST, consulte Autenticar um dispositivo usando certificados emitidos dinamicamente via EST.
- Configure
[cert_issuance.est.identity_auto_renew]
usando a mesma sintaxe da configuração de renovação automática do certificado de provisionamento acima.
Dessa forma, o serviço de certificado IoT Edge usa o certificado de inicialização para autenticação inicial com o servidor EST e solicita um certificado de identidade para futuras solicitações EST para o mesmo servidor. Se, por algum motivo, o certificado de identidade EST expirar antes da renovação, o IoT Edge voltará a usar o certificado de bootstrap.
Execute
sudo iotedge config apply
para aplicar as novas configurações.Execute
sudo iotedge check
para verificar a configuração do dispositivo IoT Edge. Todas as verificações de configuração devem ser bem-sucedidas . Para este tutorial, você pode ignorar erros e avisos de preparação para produção, avisos do servidor DNS e verificações de conectividade.Navegue até o seu dispositivo no Hub IoT. As impressões digitais do certificado foram adicionadas ao dispositivo automaticamente usando o DPS e o servidor EST.
Nota
Quando você cria um novo dispositivo IoT Edge, ele exibe o código
417 -- The device's deployment configuration is not set in the Azure portal.
de status Esse status é normal e significa que o dispositivo está pronto para receber uma implantação de módulo.
Renovação do certificado de teste
Você pode reemitir imediatamente os certificados de identidade do dispositivo removendo os certificados e chaves existentes do dispositivo e, em seguida, aplicando a configuração do IoT Edge. O IoT Edge deteta os arquivos ausentes e solicita novos certificados.
No dispositivo IoT Edge, pare o tempo de execução do IoT Edge.
sudo iotedge system stop
Exclua os certificados e chaves existentes.
sudo sh -c "rm /var/lib/aziot/certd/certs/*" sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
Aplique a configuração do IoT Edge para renovar certificados.
sudo iotedge config apply
Pode ser necessário aguardar alguns minutos para que o tempo de execução seja iniciado.
Navegue até o seu dispositivo no Hub IoT. As impressões digitais dos certificados foram atualizadas.
Liste os arquivos de certificado usando o comando
sudo ls -l /var/lib/aziot/certd/certs
. Você deve ver as datas de criação recentes para os arquivos de certificado de dispositivo.Use o
openssl
comando para verificar o conteúdo do novo certificado. Por exemplo:sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
Substitua o nome do arquivo de certificado do dispositivo (.cer) pelo arquivo de certificado do dispositivo.
Você deve notar que o intervalo de datas de validade do certificado foi alterado.
A seguir estão outras maneiras opcionais de testar a renovação do certificado. Essas verificações demonstram como o IoT Edge renova certificados do servidor EST quando eles expiram ou estão ausentes. Após cada teste, você pode verificar novas impressões digitais no portal do Azure e usar openssl
o comando para verificar o novo certificado.
- Tente esperar um dia para o certificado expirar. O servidor EST de teste é configurado para criar certificados que expiram após um dia. O IoT Edge renova automaticamente o certificado.
- Tente ajustar a porcentagem para
threshold
renovação automática definida (config.toml
atualmente definida como 80% na configuração de exemplo). Por exemplo, defina-o e10%
observe a renovação do certificado a cada ~2 horas. - Tente ajustar o
threshold
para um inteiro seguido dem
(minutos). Por exemplo, defina-o e observe a60m
renovação do certificado 1 hora antes do vencimento.
Clean up resources (Limpar recursos)
Você pode manter os recursos e configurações criados neste tutorial e reutilizá-los. Caso contrário, você pode excluir as configurações locais e os recursos do Azure usados neste artigo para evitar cobranças.
Eliminar recursos do Azure
A eliminação de recursos e grupos de recursos do Azure é irreversível. Confirme que não elimina acidentalmente o grupo de recursos ou recursos errados. Se você criou o hub IoT dentro de um grupo de recursos existente que tem recursos que deseja manter, exclua apenas o recurso do hub IoT em si, não o grupo de recursos.
Para eliminar os recursos:
Inicie sessão no Portal do Azure e selecione Grupos de recursos.
Selecione o nome do grupo de recursos que contém os recursos de teste do IoT Edge.
Reveja a lista de recursos que o seu grupo de recursos contém. Se quiser eliminá-los todos, pode selecionar Eliminar grupo de recursos. Se você quiser excluir apenas alguns deles, você pode selecionar cada recurso para excluí-los individualmente.
Próximos passos
- Para usar o servidor EST para emitir certificados de CA de Borda, consulte Exemplo de configuração.
- O uso de nome de usuário e senha para inicializar a autenticação no servidor EST não é recomendado para produção. Em vez disso, considere o uso de certificados de inicialização de longa duração que podem ser armazenados no dispositivo durante a fabricação, semelhante à abordagem recomendada para DPS. Para ver como configurar o certificado de bootstrap para o servidor EST, consulte Autenticar um dispositivo usando certificados emitidos dinamicamente via EST.
- O servidor EST também pode ser usado para emitir certificados para todos os dispositivos em uma hierarquia. Dependendo se você tiver os requisitos do ISA-95, pode ser necessário executar uma cadeia de servidores EST com um em cada camada ou usar o módulo de proxy da API para encaminhar as solicitações. Para saber mais, veja o blog do Kevin.
- Para soluções de nível empresarial, considere: GlobalSign IoT Edge Enroll, DigiCert IoT Device Manager e Keytos EZCA.
- Para saber mais sobre certificados, consulte Entender como o Azure IoT Edge usa certificados.