Samouczek: konfigurowanie rejestracji za pośrednictwem bezpiecznego serwera transportu dla usługi Azure IoT Edge

Dotyczy:Znacznik wyboru usługi IoT Edge 1.5 IoT Edge 1.5 Znacznik wyboru usługi IoT Edge 1.4 IoT Edge 1.4

Ważne

Obsługiwane są wersje usługi IoT Edge 1.5 LTS i IoT Edge 1.4 LTS. Usługa IoT Edge 1.4 LTS kończy się 12 listopada 2024 r. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

Za pomocą usługi Azure IoT Edge można skonfigurować urządzenia tak, aby używały serwera rejestracji za pośrednictwem protokołu Secure Transport (EST) do zarządzania certyfikatami x509.

Ten samouczek przeprowadzi Cię przez proces hostowania testowego serwera EST i konfigurowania urządzenia usługi IoT Edge na potrzeby rejestracji i odnawiania certyfikatów x509. Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie i hostowanie testowego serwera EST
  • Konfigurowanie rejestracji grupy usługi DPS
  • Konfigurowanie urządzenia

Diagram przedstawiający ogólne omówienie trzech kroków niezbędnych do ukończenia tego samouczka.

Wymagania wstępne

Co to jest rejestracja za pośrednictwem bezpiecznego transportu?

Rejestracja za pośrednictwem protokołu Secure Transport (EST) to protokół kryptograficzny, który automatyzuje wystawianie certyfikatów x.509. Jest on używany dla klientów infrastruktury kluczy publicznych (PKI), takich jak usługa IoT Edge, która wymaga certyfikatów klienta skojarzonych z urzędem certyfikacji. EST zastępuje potrzebę ręcznego zarządzania certyfikatami, co może być ryzykowne i podatne na błędy.

Serwer EST

W przypadku wystawiania i odnawiania certyfikatów potrzebny jest serwer EST dostępny dla urządzeń.

Ważne

W przypadku rozwiązań klasy korporacyjnej należy rozważyć: GlobalSign IoT Edge Enroll lub DigiCert IoT Menedżer urządzeń.

Na potrzeby testowania i programowania można użyć testowego serwera EST. W tym samouczku utworzymy testowy serwer EST.

Uruchamianie serwera EST na urządzeniu

Aby szybko rozpocząć pracę, w tym samouczku przedstawiono kroki wdrażania prostego serwera EST w kontenerze lokalnie na urządzeniu usługi IoT Edge. Ta metoda jest najprostszym podejściem do wypróbowania.

Plik Dockerfile używa systemu Ubuntu 18.04, biblioteki Cisco o nazwie libesti przykładowego kodu serwera. Jest on skonfigurowany przy użyciu następującego ustawienia, które można zmienić:

  • Główny urząd certyfikacji ważny przez 20 lat
  • Certyfikat serwera EST ważny przez 10 lat
  • Ustaw wartość domyślną certyfikatu na 1, aby przetestować odnawianie est
  • Serwer EST działa lokalnie na urządzeniu usługi IoT Edge w kontenerze

Uwaga

Nie używaj tego pliku Dockerfile w środowisku produkcyjnym.

  1. Połączenie do urządzenia, na przykład przy użyciu protokołu SSH, w którym zainstalowano usługę IoT Edge.

  2. Utwórz plik o nazwie Dockerfile (z uwzględnieniem wielkości liter) i dodaj przykładową zawartość przy użyciu ulubionego edytora tekstów.

    Napiwek

    Jeśli chcesz hostować serwer EST w usłudze Azure Container Instance, zmień myestserver.westus.azurecontainer.io na nazwę DNS serwera EST. Podczas wybierania nazwy DNS należy pamiętać, że etykieta DNS dla wystąpienia kontenera platformy Azure musi mieć długość co najmniej pięciu znaków.

    # 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. W katalogu zawierającym Dockerfileplik skompiluj obraz z przykładowego pliku Dockerfile.

    sudo docker build . --tag est
    
  4. Uruchom kontener i uwidocznij port 8085 kontenera na porcie 8085 na hoście.

    sudo docker run -d -p 8085:8085 est
    
  5. Teraz serwer EST jest uruchomiony i można uzyskać do niego dostęp przy użyciu localhost portu 8085. Sprawdź, czy jest dostępna, uruchamiając polecenie , aby wyświetlić certyfikat serwera.

    openssl s_client -showcerts -connect localhost:8085
    
  6. Powinny zostać wyświetlone -----BEGIN CERTIFICATE----- dane wyjściowe w połowie. Pobieranie certyfikatu sprawdza, czy serwer jest osiągalny i może przedstawić certyfikat.

Napiwek

Aby uruchomić ten kontener w chmurze, skompiluj obraz i wypchnij go do usługi Azure Container Registry. Następnie postępuj zgodnie z przewodnikiem Szybki start, aby wdrożyć w usłudze Azure Container Instance.

Pobieranie certyfikatu urzędu certyfikacji

Każde urządzenie wymaga certyfikatu urzędu certyfikacji skojarzonego z certyfikatem tożsamości urządzenia.

  1. Na urządzeniu usługi IoT Edge utwórz /var/aziot/certs katalog, jeśli nie istnieje, a następnie zmień na niego katalog.

    # 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. Pobierz certyfikat urzędu certyfikacji z serwera EST do katalogu i nadaj /var/aziot/certs mu cacert.crt.pemnazwę .

    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. Certyfikaty powinny być własnością użytkownika usługi kluczy aziotcs. Ustaw własność na aziotcs dla wszystkich plików certyfikatów i ustaw uprawnienia. Aby uzyskać więcej informacji na temat własności i uprawnień certyfikatów, zobacz Wymagania dotyczące uprawnień.

    # 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 {} \;
    

Aprowizuj urządzenie usługi IoT Edge przy użyciu usługi DPS

Użycie usługi Device Provisioning Service umożliwia automatyczne wystawianie i odnawianie certyfikatów z serwera EST w usłudze IoT Edge. W przypadku korzystania z serwera EST samouczka certyfikaty tożsamości wygasają w ciągu jednego dnia, wykonując ręczną aprowizację za pomocą usługi IoT Hub, ponieważ za każdym razem, gdy certyfikat wygaśnie, odcisk palca musi zostać ręcznie zaktualizowany w usłudze IoT Hub. Uwierzytelnianie urzędu certyfikacji usługi DPS z grupą rejestracji umożliwia odnawianie certyfikatów tożsamości urządzeń bez konieczności ręcznego wykonania kroków.

Przekazywanie certyfikatu urzędu certyfikacji do usługi DPS

  1. Jeśli nie masz usługi Device Provisioning Service połączonej z usługą IoT Hub, zobacz Szybki start: konfigurowanie usługi IoT Hub Device Provisioning przy użyciu witryny Azure Portal.

  2. cacert.crt.pem Przenieś plik z urządzenia na komputer z dostępem do witryny Azure Portal, na przykład do komputera programistycznego. Łatwym sposobem transferu certyfikatu jest zdalne łączenie się z urządzeniem, wyświetlanie certyfikatu przy użyciu polecenia cat /var/aziot/certs/cacert.crt.pem, kopiowanie całego danych wyjściowych i wklejanie zawartości do nowego pliku na komputerze dewelopera.

  3. W witrynie Azure Portal przejdź do swojego wystąpienia usługi IoT Hub Device Provisioning.

  4. W obszarze Ustawienia wybierz pozycję Certyfikaty, a następnie pozycję +Dodaj.

    Zrzut ekranu przedstawiający dodawanie certyfikatu urzędu certyfikacji do usługi Device Provisioning Service przy użyciu witryny Azure Portal.

    Ustawienie Wartość
    Nazwa certyfikatu Podaj przyjazną nazwę certyfikatu urzędu certyfikacji
    Plik pem lub .cer certyfikatu Przejdź do cacert.crt.pem serwera EST
    Ustawianie stanu certyfikatu na zweryfikowane podczas przekazywania Zaznacz pole wyboru
  5. Wybierz pozycję Zapisz.

Tworzenie grupy rejestracji

  1. W witrynie Azure Portal przejdź do swojego wystąpienia usługi IoT Hub Device Provisioning.

  2. W obszarze Ustawienia wybierz pozycję Zarządzaj rejestracjami.

  3. Wybierz pozycję Dodaj grupę rejestracji, a następnie wykonaj następujące kroki, aby skonfigurować rejestrację.

  4. Na karcie Rejestracja i aprowizowanie wybierz następujące ustawienia:

    Zrzut ekranu przedstawiający dodawanie grupy rejestracji usługi DPS przy użyciu witryny Azure Portal.

    Ustawienie Wartość
    Mechanizm zaświadczania Wybierz certyfikaty X.509 przekazane do tego wystąpienia usługi Device Provisioning Service
    Certyfikat podstawowy Wybierz certyfikat z listy rozwijanej
    Nazwa grupy Podaj przyjazną nazwę dla tej rejestracji grupy
    Stan aprowizacji Zaznacz pole wyboru Włącz tę rejestrację
  5. Na karcie Centra IoT wybierz swoją usługę IoT Hub z listy.

  6. Na karcie Ustawienia urządzenia zaznacz pole wyboru Włącz usługę IoT Edge na aprowidowanych urządzeniach.

    Inne ustawienia nie są istotne dla tego samouczka. Można zaakceptować ustawienia domyślne.

  7. Wybierz pozycję Przejrzyj i utwórz.

Teraz, gdy rejestracja istnieje dla urządzenia, środowisko uruchomieniowe usługi IoT Edge może automatycznie zarządzać certyfikatami urządzeń dla połączonej usługi IoT Hub.

Konfigurowanie urządzenia usługi IoT Edge

Na urządzeniu usługi IoT Edge zaktualizuj plik konfiguracji usługi IoT Edge, aby używać certyfikatów urządzeń z serwera EST.

  1. Otwórz plik konfiguracji usługi IoT Edge przy użyciu edytora. Na przykład użyj edytora nano , aby otworzyć /etc/aziot/config.toml plik.

    sudo nano /etc/aziot/config.toml
    
  2. Dodaj lub zastąp poniższe sekcje w pliku konfiguracji. Te ustawienia konfiguracji używają początkowo uwierzytelniania nazwy użytkownika i hasła w celu pobrania certyfikatu urządzenia z serwera EST. Certyfikat urządzenia służy do uwierzytelniania na serwerze EST na potrzeby przyszłych odnowień certyfikatów.

    Zastąp następujący tekst zastępczy: <DPS-ID-SCOPE> zakresem identyfikatora usługi DPS połączonym z usługą IoT Hub zawierającą zarejestrowane urządzenie oraz myiotedgedevice identyfikatorem urządzenia zarejestrowanym w usłudze Azure IoT Hub. Wartość Zakres identyfikatora można znaleźć na stronie Przegląd usługi 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"
    

    Uwaga

    W tym przykładzie usługa IoT Edge używa nazwy użytkownika i hasła do uwierzytelniania na serwerze EST za każdym razem, gdy musi uzyskać certyfikat. Ta metoda nie jest zalecana w środowisku produkcyjnym, ponieważ 1) wymaga przechowywania wpisu tajnego w postaci zwykłego tekstu i 2) usługa IoT Edge powinna używać certyfikatu tożsamości do uwierzytelniania na serwerze EST. Aby zmodyfikować środowisko produkcyjne:

    1. Rozważ użycie długotrwałych certyfikatów bootstrap, które mogą być przechowywane na urządzeniu podczas produkcji podobne do zalecanego podejścia do usługi DPS. Aby dowiedzieć się, jak skonfigurować certyfikat bootstrap dla serwera EST, zobacz Uwierzytelnianie urządzenia przy użyciu certyfikatów wystawionych dynamicznie za pośrednictwem est.
    2. Skonfiguruj [cert_issuance.est.identity_auto_renew] przy użyciu tej samej składni co konfiguracja automatycznego odnawiania certyfikatu aprowizacji powyżej.

    W ten sposób usługa certyfikatu usługi IoT Edge używa certyfikatu bootstrap do początkowego uwierzytelniania z serwerem EST i żąda certyfikatu tożsamości dla przyszłych żądań EST do tego samego serwera. Jeśli z jakiegoś powodu certyfikat tożsamości EST wygaśnie przed odnowieniem, usługa IoT Edge wróci do używania certyfikatu bootstrap.

  3. Uruchom polecenie , sudo iotedge config apply aby zastosować nowe ustawienia.

  4. Uruchom polecenie sudo iotedge check , aby zweryfikować konfigurację urządzenia usługi IoT Edge. Wszystkie testy konfiguracji powinny zakończyć się pomyślnie. W tym samouczku można zignorować błędy gotowości i ostrzeżenia produkcyjne, ostrzeżenia serwera DNS i kontrole łączności.

  5. Przejdź do urządzenia w usłudze IoT Hub. Odciski palca certyfikatu zostały dodane do urządzenia automatycznie przy użyciu usługi DPS i serwera EST.

    Zrzut ekranu przedstawiający ustawienia urządzenia usługi IoT Hub w witrynie Azure Portal. Pola odcisków palca certyfikatu pokazują wartości.

    Uwaga

    Podczas tworzenia nowego urządzenia usługi IoT Edge zostanie wyświetlony kod 417 -- The device's deployment configuration is not set in the Azure portal. stanu Ten stan jest normalny i oznacza, że urządzenie jest gotowe do otrzymania wdrożenia modułu.

Testowanie odnawiania certyfikatu

Możesz natychmiast ponownie zainicjować certyfikaty tożsamości urządzenia, usuwając istniejące certyfikaty i klucze z urządzenia, a następnie stosując konfigurację usługi IoT Edge. Usługa IoT Edge wykrywa brakujące pliki i żąda nowych certyfikatów.

  1. Na urządzeniu usługi IoT Edge zatrzymaj środowisko uruchomieniowe usługi IoT Edge.

    sudo iotedge system stop
    
  2. Usuń istniejące certyfikaty i klucze.

    sudo sh -c "rm /var/lib/aziot/certd/certs/*"
    sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
    
  3. Zastosuj konfigurację usługi IoT Edge, aby odnowić certyfikaty.

    sudo iotedge config apply
    

    Może być konieczne odczekenie kilku minut na uruchomienie środowiska uruchomieniowego.

  4. Przejdź do urządzenia w usłudze IoT Hub. Odciski palca certyfikatu zostały zaktualizowane.

    Zrzut ekranu przedstawiający ustawienia urządzenia usługi IoT Hub w witrynie Azure Portal. Pola odcisków palca certyfikatu pokazują nowe wartości.

  5. Wyświetl listę plików certyfikatów przy użyciu polecenia sudo ls -l /var/lib/aziot/certd/certs. Powinny zostać wyświetlone ostatnie daty utworzenia plików certyfikatów urządzenia.

  6. Użyj polecenia , openssl aby sprawdzić nową zawartość certyfikatu. Na przykład:

    sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
    

    Zastąp nazwę pliku certyfikatu urządzenia (.cer) plikiem certyfikatu urządzenia.

    Należy zauważyć, że zakres dat ważności certyfikatu został zmieniony.

Poniżej przedstawiono opcjonalne inne sposoby testowania odnawiania certyfikatu. Te testy pokazują, jak usługa IoT Edge odnawia certyfikaty z serwera EST po wygaśnięciu lub braku. Po każdym teście możesz zweryfikować nowe odciski palca w witrynie Azure Portal i użyć openssl polecenia w celu zweryfikowania nowego certyfikatu.

  1. Spróbuj poczekać dzień wygaśnięcia certyfikatu. Testowy serwer EST jest skonfigurowany do tworzenia certyfikatów wygasających po jednym dniu. Usługa IoT Edge automatycznie odnawia certyfikat.
  2. Spróbuj dostosować wartość procentową dla threshold ustawienia automatycznego odnawiania w elemencie config.toml (obecnie ustawiono wartość 80% w przykładowej konfiguracji). Na przykład ustaw go na 10% wartość i obserwuj odnawianie certyfikatu co ok. 2 godziny.
  3. Spróbuj dostosować wartość threshold do liczby całkowitej, po której następuje m (minuty). Na przykład ustaw go na 60m wartość i obserwuj odnawianie certyfikatu 1 godziny przed wygaśnięciem.

Czyszczenie zasobów

Możesz zachować zasoby i konfiguracje utworzone w tym samouczku i użyć ich ponownie. W przeciwnym razie możesz usunąć konfiguracje lokalne i zasoby platformy Azure użyte w tym artykule, aby uniknąć naliczania opłat.

Usuwanie zasobów platformy Azure

Usuwanie zasobów i grup zasobów platformy Azure jest nieodwracalne. Uważaj, aby nie usunąć przypadkowo niewłaściwych zasobów lub niewłaściwej grupy zasobów. Jeśli centrum IoT zostało utworzone w istniejącej grupie zasobów zawierającej zasoby, które chcesz zachować, usuń tylko sam zasób centrum IoT, a nie grupę zasobów.

Aby usunąć zasoby:

  1. Zaloguj się do witryny Azure Portal, a następnie wybierz pozycję Grupy zasobów.

  2. Wybierz nazwę grupy zasobów, która zawiera zasoby testowe usługi IoT Edge.

  3. Przejrzyj listę zasobów zawartych w grupie zasobów. Jeśli chcesz usunąć je wszystkie, możesz wybrać pozycję Usuń grupę zasobów. Jeśli chcesz usunąć tylko niektóre z nich, możesz kliknąć poszczególne zasoby, aby usunąć je pojedynczo.

Następne kroki