Tutorial: Configurar o Registro pelo Servidor de Transporte Seguro para o Azure IoT Edge

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

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

Pré-requisitos

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.

  1. Conecte-se ao dispositivo, por exemplo, usando SSH, onde 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.

    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
    
  3. No diretório que contém Dockerfileo , construa sua imagem a partir do 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, 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
    
  6. 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.

  1. 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
    
  2. Recupere o certificado da autoridade de certificação do servidor EST no /var/aziot/certs diretório e nomeie-o 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 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

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

  2. 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 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 Dispositivo do Hub IoT.

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

    Uma captura de tela adicionando certificado de CA ao Serviço de Provisionamento de Dispositivo usando o portal do Azure.

    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 EST
    Definir o status do certificado como verificado ao carregar Selecione a caixa de verificação
  5. Selecione Guardar.

Criar grupo de inscrição

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

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

  3. Selecione Adicionar grupo de inscrição e conclua as etapas a seguir para configurar o registro.

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

    Uma captura de tela adicionando o grupo de registro do DPS usando o portal do Azure.

    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
  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. Pode aceitar as predefinições.

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

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

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

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

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

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

    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.

  1. No dispositivo IoT Edge, pare o tempo de execução 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 certificados.

    sudo iotedge config apply
    

    Pode ser necessário aguardar alguns minutos para que o tempo de execução seja iniciado.

  4. Navegue até o seu dispositivo no Hub IoT. As impressões digitais dos certificados foram atualizadas.

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

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

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

  1. 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.
  2. 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 e 10% observe a renovação do certificado a cada ~2 horas.
  3. Tente ajustar o threshold para um inteiro seguido de m (minutos). Por exemplo, defina-o e observe a 60m 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:

  1. Inicie sessão 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. 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