Tutorial: Configurar o registro no Servidor de Transporte Seguro para o Azure IoT Edge
Aplica-se a: IoT Edge 1.5 IoT Edge 1.4
Importante
O IoT Edge 1.5 LTS e o IoT Edge 1.4 LTS são versões com suporte. O IoT Edge 1.4 LTS chegará ao fim da vida útil em 12 de novembro de 2024. Se você estiver em uma versão anterior, confira Atualizar o Azure IoT Edge.
Com o Azure IoT Edge, você pode configurar seus dispositivos para usar um servidor EST (Registro por Transporte Seguro) para gerenciar certificados x509.
Este tutorial orienta você pela hospedagem de um servidor EST de teste e pela configuração de um dispositivo IoT Edge para registro e renovação de certificados x509. Neste tutorial, você aprenderá como:
- Criar e hospedar um servidor EST de teste
- Configurar o registro de grupo DPS
- Configurar dispositivo
Pré-requisitos
- Um dispositivo IoT Edge com o runtime do Azure IoT Edge mais recente instalado. Se você precisar criar um dispositivo de teste, conclua o Início Rápido: implantar seu primeiro módulo do IoT Edge em um dispositivo Linux virtual.
- Seu dispositivo IoT Edge requer o runtime do Azure IoT Edge 1.2 ou posterior para suporte ao EST. O runtime do Azure IoT Edge 1.3 ou posterior é necessário para renovação de certificado EST.
- DPS (Serviço de Provisionamento de Dispositivos) no Hub IoT vinculado ao Hub IoT. Para mais informações sobre a configuração do DPS, confira Início Rápido: Configurar o Serviço de Provisionamento de Dispositivos no Hub IoT com o portal do Azure.
Observação
Para usar o EST e o IoT Edge a fim de emitir e renovar automaticamente certificado de identidade do dispositivo, o que é recomendado para produção, o IoT Edge precisará provisionar como parte de um grupo de registro baseado em AC do DPS. Outros métodos de provisionamento, incluindo provisionamento manual X.509 com Hub IoT e DPS com registro individual, não dão suporte à renovação automática do certificado de identidade do dispositivo.
O que é o Registro por Transporte Seguro?
O EST (Registro por Transporte Seguro) é um protocolo criptográfico que automatiza a emissão de certificados x.509. Ele é usado para clientes de PKI (infraestrutura de chave pública), como IoT Edge, que precisam de certificados do cliente associados a uma AC (Autoridade de Certificação). O EST substitui a necessidade de gerenciamento manual de certificados, o que pode ser arriscado e propenso a erros.
Servidor EST
Para emissão e renovação de certificado, você precisa de um servidor EST acessível para seus dispositivos.
Importante
Para soluções de nível empresarial, considere: GlobalSign IoT Edge Enroll ou Gerenciador de Dispositivos IoT DigiCert.
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. Esse método é a abordagem mais simples para experimentá-lo.
O Dockerfile usa o Ubuntu 18.04, uma biblioteca Cisco chamada libest
e o código do servidor de exemplo. Ele está configurado com a seguinte definição que você pode alterar:
- AC raiz válida por 20 anos
- Certificado do servidor EST válido por 10 anos
- Definir os dias padrão do certificado como 1 para testar a renovação do EST
- O servidor EST é executado localmente no dispositivo IoT Edge em um contêiner
Cuidado
Não use este Dockerfile em produção.
Conecte-se ao dispositivo, por exemplo, usando o SSH, no qual 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.Dica
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 servidor EST. Ao escolher um nome DNS, lembre-se de que o rótulo DNS de uma instância de 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 seu
Dockerfile
, crie sua imagem usando o 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, o servidor EST está em execução e pode ser acessado usando
localhost
na 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 até a saída. A recuperação do certificado verifica se o servidor é acessível e pode apresentar seu certificado.
Dica
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
Os dispositivos exigem o certificado da AC (Autoridade de Certificação) associado a um certificado de identidade do dispositivo.
No dispositivo IoT Edge, crie o diretório
/var/aziot/certs
se ele não existir e altere o diretório para ele.# If the certificate directory doesn'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 de Autoridade de Certificação do servidor EST no diretório e nomeie-o
/var/aziot/certs
e nomeie-o comocacert.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 o DPS
O uso do Serviço de Provisionamento de Dispositivos permite que você emita e renove automaticamente certificados de um servidor EST no IoT Edge. Ao usar o servidor EST do tutorial, os certificados de identidade expiram em um dia, tornando o provisionamento manual com o Hub IoT impraticável, pois cada vez que o certificado expira, a impressão digital deve ser atualizada manualmente no Hub IoT. A autenticação da AC do DPS com o grupo de registro permite que os certificados de identidade do dispositivo sejam renovados sem nenhuma etapa manual.
Carregar o Certificado de Autoridade de Certificação no DPS
Se você não tiver um Serviço de Provisionamento de Dispositivos vinculado ao Hub IoT, consulte Início Rápido: Configurar o Serviço de Provisionamento de Dispositivos no Hub IoT com o portal do Azure.
Transfira o arquivo
cacert.crt.pem
do dispositivo para um computador com acesso ao portal do Azure, como seu computador de desenvolvimento. Um modo 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 Dispositivos no Hub IoT.
Em Configurações, selecione Certificados e, em seguida, +Adicionar.
Configuração Valor Nome de certificado Forneça um nome amigável ao Certificado de Autoridade de Certificação Certifique o arquivo .pem ou .cer Navegue até o cacert.crt.pem
servidor ESTDefina o status do certificado como verificado no carregamento Marque a caixa de seleção Selecione Salvar.
Criar o grupo de registro
No portal do Azure, navegue até sua instância do Serviço de Provisionamento de Dispositivos no Hub IoT.
Em Configurações, selecione Gerenciar registros.
Selecione Adicionar grupo de registro, em seguida, conclua as seguintes etapas para configurar o registro.
Na guia Registro + provisionamento, escolha as seguintes configurações:
Configuração Valor Mecanismo de atestado Selecione Certificados X.509 carregados nesta Instância de serviço de provisionamento de dispositivos Certificado principal Escolha o certificado na lista suspensa Nome do grupo Forneça um nome amigável para este registro de grupo Status do 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. Você pode aceitar as configurações padrão.
Selecione Examinar + criar.
Agora que existe um registro para o dispositivo, o runtime do IoT Edge pode gerenciar automaticamente certificados de dispositivo para o Hub IoT vinculado.
Configurar um dispositivo IoT Edge
No dispositivo IoT Edge, atualize o arquivo de configuração IoT Edge para usar certificados de dispositivo do servidor EST.
Abra o arquivo de configuração IoT Edge usando um editor. Por exemplo, use o editor
nano
para abrir o arquivo/etc/aziot/config.toml
.sudo nano /etc/aziot/config.toml
Adicione ou substitua as seções a seguir no arquivo de configuração. Essas configurações usam o nome de usuário e a autenticação de senha inicialmente para obter o certificado do dispositivo do servidor EST. O certificado do dispositivo é usado para autenticação no servidor EST para futuras renovações de certificado.
Substitua o seguinte texto de espaço reservado:
<DPS-ID-SCOPE>
pelo Escopo da ID do DPS vinculado ao Hub IoT que contém o dispositivo registrado emyiotedgedevice
pela ID do dispositivo registrado no Hub IoT do Azure. Você pode encontrar o valor do Escopo da ID 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"
Observação
Neste exemplo, o IoT Edge usa nome de usuário e senha para autenticar no servidor EST toda vez que precisar obter um certificado. Esse método não é recomendado em 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 usar 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 inicialização para o servidor EST, consulte Autenticar um dispositivo usando certificados emitidos dinamicamente por meio do EST.
- Configure
[cert_issuance.est.identity_auto_renew]
usando a mesma sintaxe que a configuração de renovação automática do certificado de provisionamento acima.
Dessa forma, o serviço de certificado do IoT Edge usa o certificado de inicialização para autenticação inicial com o servidor EST e solicita um certificado de identidade para solicitações EST futuras 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 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 ter êxito. Para este tutorial, você pode ignorar erros e avisos de preparação de produção, avisos do servidor DNS e verificações de conectividade.Navegue até seu dispositivo no Hub IoT. As impressões digitais do certificado foram adicionadas ao dispositivo automaticamente usando o DPS e o servidor EST.
Observação
Quando você cria um dispositivo IoT Edge, ele exibe o código de status
417 -- The device's deployment configuration is not set in the Azure portal.
. Esse status é normal e significa que o dispositivo está pronto para receber uma implantação de módulo.
Testar renovação de certificado
Você pode reemitir imediatamente os certificados de identidade do dispositivo removendo os certificados e chaves existentes do dispositivo e aplicando a configuração do IoT Edge. O IoT Edge detecta os arquivos ausentes e solicita novos certificados.
No dispositivo IoT Edge, interrompa o runtime 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 os certificados.
sudo iotedge config apply
Talvez seja necessário aguardar alguns minutos para que o runtime seja iniciado.
Navegue até seu dispositivo no Hub IoT. As impressões digitais do certificado foram atualizadas.
Liste os arquivos de certificado usando o comando
sudo ls -l /var/lib/aziot/certd/certs
. Você deve ver datas de criação recentes para os arquivos de certificado do dispositivo.Use o comando
openssl
para verificar o novo conteúdo do 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 observar que o intervalo de datas Validade do certificado foi alterado.
Veja a seguir outras maneiras opcionais de testar a renovação do certificado. Essas verificações demonstram como o IoT Edge renova certificados do servidor EST quando expiram ou estão ausentes. Após cada teste, você pode verificar novas impressões digitais no portal do Azure e usar o comando openssl
para verificar o novo certificado.
- Tente aguardar um dia para que o certificado expire. 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
threshold
para renovação automática definida emconfig.toml
(atualmente definida como 80% na configuração de exemplo). Por exemplo, defina-o como10%
e observe a renovação do certificado a cada ~2 horas. - Tente ajustar o
threshold
para um número inteiro seguido porm
(minutos). Por exemplo, defina-o como60m
e observe a renovação do certificado 1 hora antes da expiração.
Limpar recursos
Você pode manter os recursos e as configurações criados neste tutorial e reutilizá-los. Caso contrário, é possível excluir as configurações locais e os recursos do Azure usados neste artigo para evitar encargos.
Excluir recursos do Azure
A exclusão de recursos do Azure e dos grupos de recursos é irreversível. Não exclua acidentalmente grupo de recursos ou recursos incorretos. Se você criou o hub IoT em um grupo de recursos existente que contém recursos que deseja manter, exclua apenas o recurso do hub IoT, não o grupo de recursos.
Para excluir os recursos:
Entre 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.
Examine a lista de recursos que seu grupo de recursos contém. Se você deseja excluir todos eles, selecione Excluir grupo de recursos. Se quiser excluir apenas alguns, clique em cada recurso para excluí-los individualmente.
Próximas etapas
- Para usar o servidor EST para emitir Certificados de Autoridade de Certificação do Edge, consulte a configuração de exemplo.
- O uso de nome de usuário e senha para autenticação de inicialização no servidor EST não é recomendado para produção. Em vez disso, considere usar 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 inicialização para o servidor EST, consulte Autenticar um dispositivo usando certificados emitidos dinamicamente por meio do EST.
- O servidor EST também pode ser usado para emitir certificados para todos os dispositivos em uma hierarquia. Dependendo de se você tem requisitos ISA-95, talvez seja necessário executar uma cadeia de servidores EST com um em cada camada ou usar o módulo proxy de API para encaminhar as solicitações. Para saber mais, confira o blog do Kevin.
- Para soluções de nível empresarial, considere: Inscrever-se no GlobalSign IoT Edge ou Gerenciador de Dispositivos IoT DigiCert e EZCA do Keytos.
- Para saber mais sobre certificados, confira Entender como o Azure IoT Edge usa certificados.