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