Compartilhar via


Tutorial: Configurar o registro no Servidor de Transporte Seguro para o Azure IoT Edge

Aplica-se a: Marca de seleção do IoT Edge 1.5 IoT Edge 1.5 marca de seleção do IoT Edge 1.4 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

Diagrama mostrando a visão geral de alto nível das três etapas necessárias para concluir este tutorial.

Pré-requisitos

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.

  1. Conecte-se ao dispositivo, por exemplo, usando o SSH, no qual você instalou o IoT Edge.

  2. 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
    
  3. No diretório que contém seu Dockerfile, crie sua imagem usando o Dockerfile de exemplo.

    sudo docker build . --tag est
    
  4. Inicie o contêiner e exponha a porta 8085 do contêiner à porta 8085 no host.

    sudo docker run -d -p 8085:8085 est
    
  5. 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
    
  6. 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.

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.

  1. 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
    
  2. Recupere o Certificado de Autoridade de Certificação do servidor EST no diretório e nomeie-o /var/aziot/certs e nomeie-o como cacert.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
    
  3. 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

  1. 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.

  2. 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 comando cat /var/aziot/certs/cacert.crt.pem, copiar toda a saída e colar o conteúdo em um novo arquivo no computador de desenvolvimento.

  3. No portal do Azure, navegue até sua instância do Serviço de Provisionamento de Dispositivos no Hub IoT.

  4. Em Configurações, selecione Certificados e, em seguida, +Adicionar.

    Uma captura de tela da adição do Certificado de Autoridade de Certificação no Serviço de Provisionamento de Dispositivos usando o portal do Azure.

    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 EST
    Defina o status do certificado como verificado no carregamento Marque a caixa de seleção
  5. Selecione Salvar.

Criar o grupo de registro

  1. No portal do Azure, navegue até sua instância do Serviço de Provisionamento de Dispositivos no Hub IoT.

  2. Em Configurações, selecione Gerenciar registros.

  3. Selecione Adicionar grupo de registro, em seguida, conclua as seguintes etapas para configurar o registro.

  4. Na guia Registro + provisionamento, escolha as seguintes configurações:

    Uma captura de tela da adição do grupo de registro do DPS usando o portal do Azure.

    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
  5. Na guia Hubs IoT, escolha seu Hub IoT na lista.

  6. 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.

  7. 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.

  1. 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
    
  2. 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 e myiotedgedevice 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:

    1. 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.
    2. 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.

  3. Execute sudo iotedge config apply para aplicar as novas configurações.

  4. 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.

  5. 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.

    Uma captura de tela das configurações do dispositivo do Hub IoT no portal do Azure. Os campos de impressão digital do certificado mostram os valores.

    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.

  1. No dispositivo IoT Edge, interrompa o runtime do IoT Edge.

    sudo iotedge system stop
    
  2. Exclua os certificados e chaves existentes.

    sudo sh -c "rm /var/lib/aziot/certd/certs/*"
    sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
    
  3. 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.

  4. Navegue até seu dispositivo no Hub IoT. As impressões digitais do certificado foram atualizadas.

    Uma captura de tela das configurações do dispositivo do Hub IoT no portal do Azure. Os campos de impressão digital do certificado mostram os novos valores.

  5. 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.

  6. 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.

  1. 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.
  2. Tente ajustar a porcentagem threshold para renovação automática definida em config.toml (atualmente definida como 80% na configuração de exemplo). Por exemplo, defina-o como 10% e observe a renovação do certificado a cada ~2 horas.
  3. Tente ajustar o threshold para um número inteiro seguido por m (minutos). Por exemplo, defina-o como 60m 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:

  1. Entre no portal do Azure e selecione Grupos de recursos.

  2. Selecione o nome do grupo de recursos que contém os recursos de teste do IoT Edge.

  3. 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