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 regisztrációs csoportot az Azure IoT Hub Device Provisioning Service-ben (DPS), amely köztes vagy legfelső szintű CA X.509-tanúsítványokat használ. A regisztrációs csoport az Azure IoT 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
Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
Hajtsa végre az IoT Hub Device Provisioning Service azure portallal való beállításának lépéseit.
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 Node.js 4.0-s vagy újabb vagy újabb verzióját a gépére.
Java SE Fejlesztői készlet 8. Ez a cikk a Java-hoz készült Azure IoT SDK-t használja, amely Windowson és Linuxon is működik. Ez a cikk a Windowst használja.
- 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:
Jelentkezzen be az Azure Portalra.
A bal oldali menüben vagy a portállapon válassza a Minden erőforrás lehetőséget.
Válassza ki az Eszközkiépítési szolgáltatást.
A Beállítások menüben válassza a Tanúsítványok lehetőséget.
A felső menüben válassza a + Hozzáadás:lehetőséget.
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.
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.
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.
Jelentkezzen be az Azure Portalra.
A bal oldali menüben vagy a portállapon válassza a Minden erőforrás lehetőséget.
Válassza ki az Eszközkiépítési szolgáltatást.
A Beállítások menüben válassza a Megosztott hozzáférési szabályzatok lehetőséget.
Válassza ki a használni kívánt hozzáférési szabályzatot.
Az Access Policy panelen másolja és mentse az elsődleges kulcsot kapcsolati sztring.
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.
Nyisson meg egy Windows-parancssort, és lépjen egy mappába, ahol létre szeretné hozni az alkalmazást.
Konzolprojekt létrehozásához futtassa a következő parancsot:
dotnet new console --framework net6.0 --use-program-main
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.
Nyissa meg Program.cs fájlt egy szerkesztőben.
Cserélje le a fájl tetején található névtérutasítást a következő sorra:
namespace CreateEnrollmentGroup;
Adja hozzá a következő
using
utasításokat a fájl tetején aznamespace
utasítás fölött:using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using Microsoft.Azure.Devices.Provisioning.Service;
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 a kiépítési szolgáltatással töltöttek fel és ellenőriztek, 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.
Adja hozzá a következő metódust az
Program
osztályhoz. Ez a kód létrehoz egy bejegyzéstEnrollmentGroup
, majd meghívja aProvisioningServiceClient.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 } }
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(); }
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.
Tipp.
Az egyszerűség kedvéért ez a minta SAS-hitelesítést használ a DPS szolgáltatás API-hoz való csatlakozáshoz. Biztonságosabb módszer az Azure-jogkivonat hitelesítő adatainak használata. Erre a hitelesítési módszerre példaként tekintse meg a Node.js SDK create_tpm_enrollment_with_token_credentials.js mintáját.
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.
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)); } }); } });
Windows-parancssor megnyitása.
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
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
Nyissa meg a /src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java fájlt egy tetszőleges szerkesztőben.
Cserélje le
[Provisioning Connection String]
a kiépítési szolgáltatás kapcsolati sztring bemásolt kapcsolati sztring.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 a kiépítési szolgáltatással töltöttek fel és ellenőriztek, 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 ezt a 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.
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 volt 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.
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);
Mentse a ServiceEnrollmentGroupSample.java fájlt.
A regisztrációs mintacsoport futtatása
Minta futtatása:
dotnet run
Sikeres létrehozás esetén a parancsablak megjeleníti az új regisztrációs csoport tulajdonságait.
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 a kiépítési szolgáltatással töltöttek fel és ellenőriztek, 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>"
Sikeres létrehozás esetén a parancsablak megjeleníti az új regisztrációs csoport tulajdonságait.
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.
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 a következő parancsban le kell cserélnie a verziót.cd target java -jar ./service-enrollment-group-sample-1.8.1-with-deps.jar
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:
Az Azure Portalon keresse meg a Device Provisioning Service-példányt.
A Beállítások menüben válassza a Regisztrációk kezelése lehetőséget.
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.
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.
Zárja be a minta kimeneti ablakát a számítógépen.
Az Azure Portal bal oldali menüjében válassza a Minden erőforrás lehetőséget.
Válassza ki az Eszközkiépítési szolgáltatást.
A Bal oldali menü Beállítások területén válassza a Regisztrációk kezelése lehetőséget.
Válassza a Regisztrációs csoportok lapot.
Jelölje be a cikkben létrehozott regisztrációs csoport csoportneve melletti jelölőnégyzetet.
Az oldal tetején válassza a Törlés lehetőséget.
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.
Válassza ki a cikkhez feltöltött tanúsítványt.
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:
Az X.509-tanúsítvány DPS-sel való igazolásával kapcsolatos további információkért lásd az X.509 tanúsítványigazolást.
Az eszközök X.509-tanúsítványokat használó regisztrációs csoporton keresztüli kiépítésének végpontok közötti példáját a több X.509-eszköz üzembe helyezése regisztrációs csoportok használatával oktatóanyagban tekinti meg.
Az egyes regisztrációk és regisztrációs csoportok Azure Portallal történő kezeléséről az Eszközregisztrációk kezelése az Azure Portalon című témakörben olvashat.