Megosztás a következőn keresztül:


Eszközkiépítési szolgáltatás regisztrációs csoportjának programozott létrehozása az X.509-tanúsítványigazoláshoz

Ez a cikk bemutatja, hogyan hozhat létre programozott módon egy olyan regisztrációs csoportot , amely köztes vagy legfelső szintű CA X.509-tanúsítványokat használ. A regisztrációs csoport az Azure IoT Hub DPS szolgáltatás SDK-val és egy mintaalkalmazással jön létre. Egy regisztrációs csoport a tanúsítványláncukban ugyanazon aláíró tanúsítvánnyal rendelkező eszközök kiépítési szolgáltatáshoz való hozzáférését szabályozza. További információ: X.509-tanúsítványok használata a DPS-vel. További információ az X.509-tanúsítványon alapuló nyilvánoskulcs-infrastruktúra (PKI) az Azure IoT Hubbal és a Device Provisioning Service-szel való használatáról: X.509 hitelesítésszolgáltatói tanúsítványok biztonsági áttekintése.

Előfeltételek

  • Telepítse a .NET 6.0 SDK-t vagy újabb verziót Windows-alapú gépére. A verzió ellenőrzéséhez használja az alábbi parancsot.

    dotnet --info
    
  • Telepítse a Git legújabb verzióját. Győződjön meg arról, hogy a Git hozzá van adva a parancsablakhoz elérhető környezeti változókhoz. Tekintse meg a Software Freedom Conservancy Git-ügyféleszközeit a telepíteni kívánt eszközök legújabb verziójához git , amely tartalmazza a Git Basht, a helyi Git-adattárral való interakcióhoz használható parancssori alkalmazást.

Feljegyzés

Bár a cikkben szereplő lépések Windows és Linux rendszerű számítógépeken is működnek, ez a cikk windowsos fejlesztőszámítógépet használ.

Teszttanúsítványok létrehozása

Az X.509 tanúsítványigazolást használó regisztrációs csoportok konfigurálhatók fő hitelesítésszolgáltatói vagy köztes tanúsítvány használatára. A szokásosabb eset a regisztrációs csoport konfigurálása köztes tanúsítvánnyal. A köztes tanúsítvány használata nagyobb rugalmasságot biztosít, mivel több köztes tanúsítványt is létrehozhat vagy visszavonhat ugyanazzal a fő hitelesítésszolgáltatói tanúsítvánnyal.

Ebben a cikkben egy legfelső szintű hitelesítésszolgáltatói tanúsítványfájlra, egy köztes hitelesítésszolgáltatói tanúsítványfájlra, vagy .pem vagy .cer formátumban kell lennie. Az egyik fájl a legfelső szintű CA X.509-tanúsítvány nyilvános részét, a másik pedig a köztes CA X.509-tanúsítvány nyilvános részét tartalmazza.

Ha már rendelkezik legfelső szintű hitelesítésszolgáltatói fájllal és/vagy köztes hitelesítésszolgáltatói fájllal, folytathatja a legfelső szintű vagy köztes hitelesítésszolgáltatói tanúsítvány hozzáadását és ellenőrzését.

Ha nem rendelkezik legfelső szintű hitelesítésszolgáltatói fájllal és/vagy köztes hitelesítésszolgáltatói fájllal, a létrehozásukhoz kövesse az X.509-tanúsítványlánc létrehozása című szakasz lépéseit. Miután elvégezte a köztes hitelesítésszolgáltatói tanúsítvány létrehozásának lépéseit, leállhat, mivel nincs szüksége eszköztanúsítványokra a jelen cikkben ismertetett lépések elvégzéséhez. Ha végzett, két X.509-tanúsítványfájlja van: ./certs/azure-iot-test-only.root.ca.cert.pem és ./certs/azure-iot-test-only.intermediate.cert.pem.

A legfelső szintű vagy köztes hitelesítésszolgáltatói tanúsítvány hozzáadása és ellenőrzése

Azok az eszközök, amelyek X.509-tanúsítványokat használó regisztrációs csoporton keresztül építenek ki, a dpS-hitelesítéskor a teljes tanúsítványláncot bemutatják. Ahhoz, hogy a DPS érvényesíthesse a tanúsítványláncot, a regisztrációs csoportban konfigurált főtanúsítványnak vagy köztes tanúsítványnak ellenőrzött tanúsítványnak kell lennie, vagy egy hitelesített tanúsítványra kell feltekernie a tanúsítványláncban, amelyet az eszköz a szolgáltatással való hitelesítéskor mutat be.

Ebben a cikkben feltételezzük, hogy rendelkezik egy legfelső szintű hitelesítésszolgáltatói tanúsítvánnyal és egy köztes hitelesítésszolgáltatói tanúsítvánnyal is, amelyet a legfelső szintű hitelesítésszolgáltató aláírt:

  • Ha a regisztrációs csoportot a legfelső szintű hitelesítésszolgáltatói tanúsítvánnyal szeretné létrehozni, fel kell töltenie és ellenőriznie kell a legfelső szintű hitelesítésszolgáltatói tanúsítványt.

  • Ha a regisztrációs csoportot a köztes hitelesítésszolgáltatói tanúsítvánnyal szeretné létrehozni, feltöltheti és ellenőrizheti a legfelső szintű hitelesítésszolgáltatói tanúsítványt vagy a köztes hitelesítésszolgáltatói tanúsítványt. (Ha több köztes hitelesítésszolgáltatói tanúsítvánnyal rendelkezik a tanúsítványláncban, feltöltheti és ellenőrizheti a legfelső szintű hitelesítésszolgáltatói tanúsítvány és a regisztrációs csoportot létrehozó köztes tanúsítvány között található köztes tanúsítványt.)

A legfelső szintű vagy köztes hitelesítésszolgáltatói tanúsítvány hozzáadása és ellenőrzése a Device Provisioning Service-hez:

  1. Jelentkezzen be az Azure Portalra.

  2. A bal oldali menüben vagy a portállapon válassza a Minden erőforrás lehetőséget.

  3. Válassza ki az Eszközkiépítési szolgáltatást.

  4. A Beállítások menüben válassza a Tanúsítványok lehetőséget.

  5. A felső menüben válassza a + Hozzáadás:lehetőséget.

  6. Adja meg a gyökér- vagy köztes hitelesítésszolgáltatói tanúsítvány nevét, és töltse fel a .pem vagy .cer fájlt.

  7. Válassza a Tanúsítvány állapotának beállítása a feltöltés során ellenőrizendő állapot beállítása lehetőséget.

    Képernyőkép a legfelső szintű hitelesítésszolgáltatói tanúsítvány DPS-példányhoz való hozzáadásáról.

  8. Válassza a Mentés lehetőséget.

A kiépítési szolgáltatás kapcsolati sztringjének lekérése

A cikkben szereplő példához szüksége van a kiépítési szolgáltatás kapcsolati sztring. A lekéréshez kövesse az alábbi lépéseket.

  1. Jelentkezzen be az Azure Portalra.

  2. A bal oldali menüben vagy a portállapon válassza a Minden erőforrás lehetőséget.

  3. Válassza ki az Eszközkiépítési szolgáltatást.

  4. A Beállítások menüben válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  5. Válassza ki a használni kívánt hozzáférési szabályzatot.

  6. Az Access Policy panelen másolja és mentse az elsődleges kulcsot kapcsolati sztring.

    Képernyőkép a kiépítési szolgáltatás kapcsolati sztring helyéről a portálon.

A regisztrációs csoport mintájának létrehozása

Ez a szakasz bemutatja, hogyan hozhat létre egy .NET Core-konzolalkalmazást, amely regisztrációs csoportot ad hozzá a kiépítési szolgáltatáshoz.

  1. Nyisson meg egy Windows-parancssort, és lépjen egy mappába, ahol létre szeretné hozni az alkalmazást.

  2. Konzolprojekt létrehozásához futtassa a következő parancsot:

    dotnet new console --framework net6.0 --use-program-main 
    
  3. A DPS szolgáltatás SDK-jára mutató hivatkozás hozzáadásához futtassa a következő parancsot:

    dotnet add package Microsoft.Azure.Devices.Provisioning.Service 
    

    Ez a lépés letölti, telepíti és hozzáad egy hivatkozást az Azure IoT DPS szolgáltatásügyfél NuGet-csomagjához és függőségeihez. Ez a csomag tartalmazza a .NET szolgáltatás SDK bináris fájljait.

  4. Nyissa meg Program.cs fájlt egy szerkesztőben.

  5. Cserélje le a fájl tetején található névtérutasítást a következő sorra:

    namespace CreateEnrollmentGroup;
    
  6. Adja hozzá a következő using utasításokat a fájl tetején az namespace utasítás fölött:

    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. Adja hozzá a következő mezőket az Program osztályhoz, és végezze el a jelzett módosításokat.

    private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}";
    private static string EnrollmentGroupId = "enrollmentgrouptest";
    private static string X509RootCertPath = @"{Path to a .cer or .pem file for a verified root CA or intermediate CA X.509 certificate}";
    
    • Cserélje le a ProvisioningServiceConnectionString helyőrző értéket az előző szakaszban másolt kiépítési szolgáltatás kapcsolati sztring.

    • Cserélje le a X509RootCertPath helyőrző értéket egy .pem vagy .cer fájl elérési útjára. Ez a fájl egy olyan legfelső szintű CA X.509-tanúsítvány nyilvános részét jelöli, amelyet korábban feltöltöttek és ellenőriztek a kiépítési szolgáltatással, vagy egy köztes tanúsítványt, amelyet feltöltöttek és ellenőriztek, vagy egy tanúsítványt töltöttek fel és ellenőriztek az aláírási láncban.

    • Tetszés szerint módosíthatja az EnrollmentGroupId értéket. A sztring csak kisbetűs karaktereket és kötőjelet tartalmazhat.

    Fontos

    Az éles kódban vegye figyelembe a következő biztonsági szempontokat:

    • A kapcsolati sztring fix kódolása a kiépítési szolgáltatás rendszergazdája esetében nem felel meg az ajánlott biztonsági eljárásoknak. Ehelyett biztonságosan kell tárolni a sztringet, például egy biztonságos konfigurációs fájlban vagy a beállításjegyzékben.
    • Ügyeljen arra, hogy az aláíró tanúsítványnak csak a nyilvános részét töltse fel. Soha ne töltse fel a kiépítési szolgáltatás titkos kulcsait tartalmazó .pfx (PKCS12) vagy .pem fájlt.
  8. Adja hozzá a következő metódust az Program osztályhoz. Ez a kód létrehoz egy bejegyzést EnrollmentGroup , majd meghívja a ProvisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync metódust, hogy adja hozzá a regisztrációs csoportot a kiépítési szolgáltatáshoz.

    public static async Task RunSample()
    {
        Console.WriteLine("Starting sample...");
    
        using (ProvisioningServiceClient provisioningServiceClient =
                ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString))
        {
            #region Create a new enrollmentGroup config
            Console.WriteLine("\nCreating a new enrollmentGroup...");
            var certificate = new X509Certificate2(X509RootCertPath);
            Attestation attestation = X509Attestation.CreateFromRootCertificates(certificate);
            EnrollmentGroup enrollmentGroup =
                    new EnrollmentGroup(
                            EnrollmentGroupId,
                            attestation)
                    {
                        ProvisioningStatus = ProvisioningStatus.Enabled
                    };
            Console.WriteLine(enrollmentGroup);
            #endregion
    
            #region Create the enrollmentGroup
            Console.WriteLine("\nAdding new enrollmentGroup...");
            EnrollmentGroup enrollmentGroupResult =
                await provisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync(enrollmentGroup).ConfigureAwait(false);
            Console.WriteLine("\nEnrollmentGroup created with success.");
            Console.WriteLine(enrollmentGroupResult);
            #endregion
    
        }
    }
    
  9. Végül cserélje le a metódust Main a következő sorokra:

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. Mentse a módosításokat.

Ez a szakasz bemutatja, hogyan hozhat létre egy Node.js szkriptet, amely regisztrációs csoportot ad hozzá a kiépítési szolgáltatáshoz.

  1. A munkamappában egy parancsablakból futtassa a következőt:

    npm install azure-iot-provisioning-service
    

    Ez a lépés letölti, telepíti és hozzáadja az Azure IoT DPS szolgáltatás ügyfélcsomagjára és függőségeire mutató hivatkozást. Ez a csomag tartalmazza a Node.js szolgáltatás SDK bináris fájljait.

  2. Egy szövegszerkesztővel hozzon létre egy create_enrollment_group.js fájlt a munkamappában. Adja hozzá a következő kódot a fájlhoz, és mentse:

        'use strict';
        var fs = require('fs');
    
        var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient;
    
        var serviceClient = provisioningServiceClient.fromConnectionString(process.argv[2]);
    
        var enrollment = {
          enrollmentGroupId: 'first',
          attestation: {
            type: 'x509',
            x509: {
              signingCertificates: {
                primary: {
                  certificate: fs.readFileSync(process.argv[3], 'utf-8').toString()
                }
              }
            }
          },
          provisioningStatus: 'disabled'
        };
    
        serviceClient.createOrUpdateEnrollmentGroup(enrollment, function(err, enrollmentResponse) {
          if (err) {
            console.log('error creating the group enrollment: ' + err);
          } else {
            console.log("enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
            enrollmentResponse.provisioningStatus = 'enabled';
            serviceClient.createOrUpdateEnrollmentGroup(enrollmentResponse, function(err, enrollmentResponse) {
              if (err) {
                console.log('error updating the group enrollment: ' + err);
              } else {
                console.log("updated enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
              }
            });
          }
        });
    

  1. Windows-parancssor megnyitása.

  2. Klónozza az eszközregisztrációs kódmintához tartozó GitHub-adattárat a Java Service SDK használatával:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Az adattár letöltési helyéről lépjen a mintamappába:

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample 
    
  4. Nyissa meg a /src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java fájlt egy tetszőleges szerkesztőben.

  5. Cserélje le [Provisioning Connection String] a kiépítési szolgáltatás kapcsolati sztring bemásolt kapcsolati sztring.

  6. Cserélje le az PUBLIC_KEY_CERTIFICATE_STRING állandó sztringet a legfelső szintű vagy köztes hitelesítésszolgáltatói tanúsítványfájl .pem értékére. Ez a fájl egy olyan legfelső szintű CA X.509-tanúsítvány nyilvános részét jelöli, amelyet korábban feltöltöttek és ellenőriztek a kiépítési szolgáltatással, vagy egy köztes tanúsítványt, amelyet feltöltöttek és ellenőriztek, vagy egy tanúsítványt töltöttek fel és ellenőriztek az aláírási láncban.

    A tanúsítványszöveg szintaxisának az alábbi mintát kell követnie további szóközök és karakterek nélkül.

    private static final String PUBLIC_KEY_CERTIFICATE_STRING = 
            "-----BEGIN CERTIFICATE-----\n" +
            "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" +
                ...
            "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" +
            "-----END CERTIFICATE-----";
    

    A sztringérték manuális frissítése hibát okozhat. A megfelelő szintaxis létrehozásához másolja és illessze be a következő parancsot egy Git Bash-parancssorba , cserélje le your-cert.pem a tanúsítványfájl helyére, és nyomja le az ENTER billentyűt. Ez a parancs létrehozza a sztringállandó PUBLIC_KEY_CERTIFICATE_STRING érték szintaxisát, és beírja a kimenetbe.

    sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' your-cert.pem
    

    Másolja és illessze be a kimeneti tanúsítvány szövegét az állandó értékhez.

    Fontos

    Az éles kódban vegye figyelembe a következő biztonsági szempontokat:

    • A kapcsolati sztring fix kódolása a kiépítési szolgáltatás rendszergazdája esetében nem felel meg az ajánlott biztonsági eljárásoknak. Ehelyett biztonságosan kell tárolni a sztringet, például egy biztonságos konfigurációs fájlban vagy a beállításjegyzékben.
    • Ügyeljen arra, hogy az aláíró tanúsítványnak csak a nyilvános részét töltse fel. Soha ne töltse fel a kiépítési szolgáltatás titkos kulcsait tartalmazó .pfx (PKCS12) vagy .pem fájlt.
  7. A minta lehetővé teszi egy IoT Hub beállítását a regisztrációs csoportban az eszköz üzembe helyezéséhez. Ennek olyan IoT Hubnak kell lennie, amely korábban a kiépítési szolgáltatáshoz lett csatolva. Ebben a cikkben lehetővé tesszük, hogy a DPS az alapértelmezett foglalási szabályzatnak megfelelően válasszon a csatolt központok közül, egyenletesen súlyozott eloszlással. Fűzzön megjegyzést a következő utasításhoz a fájlban:

    enrollmentGroup.setIotHubHostName(IOTHUB_HOST_NAME);                // Optional parameter.
    
  8. A mintakód létrehoz, frissít, lekérdez és töröl egy regisztrációs csoportot az X.509-eszközökhöz. A regisztrációs csoport Azure Portalon való sikeres létrehozásának ellenőrzéséhez tegye megjegyzésbe a következő kódsorokat a fájl vége közelében:

    // ************************************** Delete info of enrollmentGroup ***************************************
    System.out.println("\nDelete the enrollmentGroup...");
    provisioningServiceClient.deleteEnrollmentGroup(enrollmentGroupId);
    
  9. Mentse a ServiceEnrollmentGroupSample.java fájlt.

A regisztrációs mintacsoport futtatása

  1. Minta futtatása:

    dotnet run
    
  2. Sikeres létrehozás esetén a parancsablak megjeleníti az új regisztrációs csoport tulajdonságait.

  1. Futtassa a következő parancsot a parancssorban. Írja be az idézőjeleket a parancsargumentumok köré, és cserélje le <connection string> az előző szakaszban másolt kapcsolati sztring és <certificate .pem file> a tanúsítványfájl .pem elérési útjára. Ez a fájl egy olyan legfelső szintű CA X.509-tanúsítvány nyilvános részét jelöli, amelyet korábban feltöltöttek és ellenőriztek a kiépítési szolgáltatással, vagy egy köztes tanúsítványt, amelyet feltöltöttek és ellenőriztek, vagy egy tanúsítványt töltöttek fel és ellenőriztek az aláírási láncban.

    node create_enrollment_group.js "<connection string>" "<certificate .pem file>"
    
  2. Sikeres létrehozás esetén a parancsablak megjeleníti az új regisztrációs csoport tulajdonságait.

  1. Az azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample mappából futtassa a következő parancsot a minta létrehozásához:

    mvn install -DskipTests
    

    Ez a parancs letölti az Azure IoT DPS szolgáltatás-ügyfél Maven-csomagot a gépére, és létrehozza a mintát. Ez a csomag tartalmazza a Java-szolgáltatás SDK bináris fájljait.

  2. Váltson a célmappára , és futtassa a mintát. Az előző lépés buildje .jar fájlt a célmappában a következő fájlformátummal: provisioning-x509-sample-{version}-with-deps.jar; például: provisioning-x509-sample-1.8.1-with-deps.jar. Előfordulhat, hogy az alábbi parancsban le kell cserélnie a verziót.

    cd target
    java -jar ./service-enrollment-group-sample-1.8.1-with-deps.jar
    
  3. Sikeres létrehozás esetén a parancsablak megjeleníti az új regisztrációs csoport tulajdonságait.

A regisztrációs csoport létrehozásának ellenőrzése:

  1. Az Azure Portalon keresse meg a Device Provisioning Service-példányt.

  2. A Beállítások menüben válassza a Regisztrációk kezelése lehetőséget.

  3. Válassza a Regisztrációs csoportok lapot. Egy új regisztrációs bejegyzésnek kell megjelennie, amely megfelel a mintában használt regisztrációs csoport azonosítójának.

Képernyőkép az újonnan létrehozott regisztrációs csoportról a portálon.

Képernyőkép az újonnan létrehozott regisztrációs csoportról a portálon.

Képernyőkép az újonnan létrehozott regisztrációs csoportról a portálon.

Az erőforrások eltávolítása

Ha az Azure IoT Hub Device Provisioning Service oktatóanyagait szeretné megismerni, ne törölje a cikkben létrehozott erőforrásokat. Ellenkező esetben az alábbi lépésekkel törölheti a cikk által létrehozott összes erőforrást.

  1. Zárja be a minta kimeneti ablakát a számítógépen.

  2. Az Azure Portal bal oldali menüjében válassza a Minden erőforrás lehetőséget.

  3. Válassza ki az Eszközkiépítési szolgáltatást.

  4. A Bal oldali menü Beállítások területén válassza a Regisztrációk kezelése lehetőséget.

  5. Válassza a Regisztrációs csoportok lapot.

  6. Jelölje be a cikkben létrehozott regisztrációs csoport csoportneve melletti jelölőnégyzetet.

  7. Az oldal tetején válassza a Törlés lehetőséget.

  8. Az Azure Portal eszközkiépítési szolgáltatásában válassza a Tanúsítványok lehetőséget a bal oldali menü Beállítások területén.

  9. Válassza ki a cikkhez feltöltött tanúsítványt.

  10. A Tanúsítvány részleteinek tetején válassza a Törlés lehetőséget.

Tanúsítványeszközök

Az Azure IoT C SDK olyan szkriptekkel rendelkezik, amelyek segítenek a tanúsítványok létrehozásában és kezelésében. További információkért lásd: A hitelesítésszolgáltatói tanúsítványok tesztelése mintákhoz és oktatóanyagokhoz.

Az Azure IoT Node.js SDK olyan szkriptekkel rendelkezik, amelyek segítenek a tanúsítványok létrehozásában és kezelésében. További információ: Eszközök az Azure IoT Device Provisioning Device SDK for Node.js.

Az Azure IoT C SDK-ban elérhető eszközöket is használhatja. További információkért lásd: A hitelesítésszolgáltatói tanúsítványok tesztelése mintákhoz és oktatóanyagokhoz.

Az Azure IoT Java SDK olyan teszteszközöket tartalmaz, amelyek segítenek a tanúsítványok létrehozásában és kezelésében. További információ: X509 tanúsítványgenerátor DICE emulátor használatával.

Következő lépések

Ebben a cikkben létrehozott egy regisztrációs csoportot egy X.509 köztes vagy fő hitelesítésszolgáltatói tanúsítványhoz az Azure IoT Hub Device Provisioning Service használatával. További információért tekintse meg az alábbi hivatkozásokat: