Tanúsítványok kezelése magas szintű alkalmazásokban
A CertStore API lehetővé teszi, hogy egy magas szintű alkalmazás kezelje a hálózati hitelesítéshez használható tanúsítványokat. Az az sphere-eszköztanúsítvány lehetővé teszi a tanúsítványok parancssorból történő kezelését.
A tanúsítványok tárolása nemvolatilis tárolóban történik az Azure Sphere-eszközön. A tanúsítványtároló vagy tanúsítványtároló legfeljebb 24 KiB tanúsítványt tartalmazhat. A tanúsítványok maximális mérete 8 KiB. A főtanúsítványok általában nagyobbak, mint az ügyféltanúsítványok. A tanúsítványtároló használata mellett a Microsoft által felügyelt ügyféltanúsítványt is elérheti. A Microsoft által felügyelt ügyféltanúsítvány csak akkor lesz elérhető, ha az eszköz legalább 24 óránként csatlakozik az internethez.
A Microsoft által felügyelt ügyféltanúsítvány használata
Ezzel a két függvénnyel szerezhet be egy ügyféltanúsítványt, és megállapíthatja, hogy készen áll-e a használatra.
DeviceAuth_GetCertificatePath az operációs rendszer által felügyelt ügyféltanúsítvány fájlelérési útját adja vissza. Ezt a fájlelérési utat egyes kódtárak megkövetelik a TLS-kommunikáció tanúsítványának betöltéséhez.
Application_IsDeviceAuthReady annak ellenőrzéséhez, hogy az aktuális alkalmazás eszközhitelesítése készen áll-e.
A CertStore követelményei
A CertStore API-t használó alkalmazásoknak tartalmazniuk kell a megfelelő fejlécfájlokat, és hozzá kell adniuk a CertStore képességet az alkalmazásjegyzékhez.
Fejlécfájlok
Adja meg a CertStore fejlécét a projektben:
#include <applibs\certstore.h>
Alkalmazásjegyzék beállításai
A tanúsítványtároló API-k használatához hozzá kell adnia az CertStore
alkalmazásképességet az alkalmazás jegyzékfájljához, és az értéket értékre kell állítania true
. Az Azure Sphere alkalmazásjegyzék-témaköre további részleteket tartalmaz az alkalmazásjegyzékről.
{
"SchemaVersion": 1,
"Name" : "Mt3620App3",
"ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
"EntryPoint": "/bin/app",
"CmdArgs": [],
"Capabilities": {
"AllowedConnections": [],
"AllowedTcpServerPorts": [],
"AllowedUdpServerPorts": [],
"CertStore" : true,
"Gpio": [],
"Uart": [],
"EnterpriseWifiConfig": true,
"WifiConfig": true,
"NetworkConfig": false,
"SystemTime": true
}
}
Tanúsítványazonosítók
Minden tanúsítvány egy tanúsítványazonosítóhoz (ID) van társítva. A tanúsítványazonosító egy 1–16 karakterből álló sztring, amely egyedileg azonosítja a tanúsítványt az eszközön. Érvényes karakterek: 'a'-'z', 'A'-'Z', '0'-'9', kötőjel (-). és aláhúzás (_). Minden tanúsítványazonosítónak egyedinek kell lennie az eszközön, függetlenül attól, hogy milyen típusú tanúsítványt azonosít.
Az egyes tanúsítványok azonosítóját a rendszer a tanúsítványtárolóba menti, és az eszközre kiterjedően használja: a CertStore API, a WifiConfig API és az Azure CLI-bővítmény. Ezért ha a parancssorból tölt be egy tanúsítványt, a tanúsítványt lekérdező, áthelyező vagy törölni kívánt alkalmazásoknak ugyanazt az azonosítót kell használniuk. Hasonlóképpen, ha egy alkalmazás betölti a tanúsítványt, a tanúsítványt módosító összes az sphere
parancsnak ugyanazt az azonosítót kell használnia. Ha olyan új tanúsítványt telepít, amelynek azonosítója megegyezik egy meglévő, bármilyen típusú tanúsítvánnyal, az új tanúsítvány felülírja a meglévőt.
Figyelem
Mivel a tanúsítványazonosítók rendszerszintűek mind az ügyfél-, mind a legfelső szintű hitelesítésszolgáltatói tanúsítványokhoz, az az sphere parancsok vagy egy új tanúsítványt hozzáadó függvényhívás felülírhatja a korábbi parancsok vagy függvényhívások által hozzáadott tanúsítványokat, ami hálózati kapcsolati hibákat okozhat. Határozottan javasoljuk, hogy dolgozzon ki egyértelmű tanúsítványfrissítési eljárásokat, és körültekintően válassza ki a tanúsítványazonosítókat.
Tanúsítvány hozzáadása a tanúsítványtárolóhoz
Ha tanúsítványt szeretne hozzáadni a tanúsítványtárolóhoz, az alkalmazás az alábbi függvények egyikét hívja meg:
- CertStore_InstallClientCertificate telepít egy ügyféltanúsítványt, amely nyilvános tanúsítványból és titkos kulcsból áll
- CertStore_InstallRootCACertificate egy nyilvános tanúsítványból álló legfelső szintű hitelesítésszolgáltatói tanúsítványt telepít
A tanúsítványnak jelen kell lennie az eszközön, mielőtt az alkalmazás telepítené. A tanúsítványoknak PKCS1 vagy PKCS8 szintaxissal és .pem formátumban kell lenniük, hogy betölthetők legyenek az Azure Sphere-eszközre. Az EAP-TLS-hálózatok tanúsítványainak beszerzése és üzembe helyezése leírja, hogyan szerezhet be tanúsítványokat, és hogyan töltheti be őket egy eszközre. A Microsoft nem ad meg tanúsítványokat.
A tanúsítvány telepítése hozzáadja a tanúsítványtárolóhoz, és elérhetővé teszi hitelesítéshez. A tanúsítványtárolón belül a tanúsítványokat az index kezeli, és index által kérhetők le. Az indexértékek tartománya 0 és (CertStore_GetCertificateCount - 1) között fut.
Az alkalmazások a CertStore_GetCertificateIdentifierAt függvény meghívásával lekérhetik a tanúsítvány azonosítóját egy adott indexben. Ezután a hívásokban a tanúsítványazonosítót használhatja a tanúsítvány adatainak lekéréséhez, a tanúsítvány áthelyezéséhez vagy törléséhez, valamint egy tanúsítvány hitelesítéshez való használatához.
Tanúsítványadatok lekérése
A CertStore API számos függvényt tartalmaz, amelyek egy tárolt tanúsítvánnyal kapcsolatos információkat adnak vissza:
- CertStore_GetCertificateNotBefore lekéri a tanúsítvány érvényességének időpontját
- CertStore_GetCertificateNotAfter megkapja a tanúsítvány lejáratának időpontját
- CertStore_GetCertificateIssuerName lekéri a tanúsítvány kiállítójának nevét
- CertStore_GetCertificateSubjectName lekéri a tanúsítvány tulajdonosának nevét; vagyis a tanúsítvány által védett
A nem korábbi és a nem utólagos időpontok hasznosak a tanúsítvány élettartamának és frissítéseinek kezelésében. Részletekért lásd: Tanúsítvány életciklusa és megújítása .
Tanúsítvány átnevezése vagy törlése
A tanúsítványok átnevezéséhez vagy törléséhez egy alkalmazás meghívja CertStore_MoveCertificate vagy CertStore_DeleteCertificate.
CertStore_MoveCertificate átnevez egy tanúsítványt a tanúsítványazonosító módosításával. Mivel a tanúsítványazonosítóknak egyedinek kell lenniük az eszközön, a tanúsítvány átnevezése azzal, hogy ugyanazt az azonosítót adja meg, mint amelyet egy másik tanúsítvány töröl. Ha például a tanúsítványtároló tartalmazza MyCert
a és YourCert
a elemet, az YourCert
áthelyezés MyCert
egyetlen, azonosítójú YourCert
tanúsítványt eredményez, amely a korábbiból MyCert
származó adatokat tartalmazza. A rendszer nem ad vissza hibát.
CertStore_DeleteCertificate egyetlen tanúsítványt töröl. Egy tanúsítvány törlésével a többi tanúsítvány újraindexelhető, 0-tól kezdve. Ezért a tanúsítványtárolóban lévő összes tanúsítvány törléséhez hurkot kell létrehoznia a tanúsítványok száma alapján, de minden iterációban törölnie kell a tanúsítványt a 0. indexnél. Ha olyan indexben próbál tanúsítványt törölni, amely már nincs használatban, CertStore_GetCertificateIdentifierAt az ERANGE értéket adja vissza.
A következő módszer megfelelően működik:
for (int i = 0; i < CertStore_GetCertificateCount(); i++) {
struct CertStore_Identifier id;
result = CertStore_GetCertificateIdentifierAt(0, &id);
CertStore_DeleteCertificate(id.identifier);
}
Tanúsítvány használata hálózati hitelesítéshez
A WifiConfig API olyan függvényeket biztosít, amelyek beállítják és visszaadják az adott Wi-Fi konfigurációhoz engedélyezett tanúsítványokat. Az EAP-TLS-hálózat beállítása az alkalmazásokban című cikkből megtudhatja, hogyan állíthat be egy magas szintű alkalmazás egy tanúsítványokat hitelesítéshez használó EAP-TLS-hálózatot.
Tanúsítványminta
A Tanúsítványok mintaalkalmazás bemutatja, hogyan használhatja az alkalmazás a CertStore függvényeket.