Správa certifikátů v aplikacích vysoké úrovně

Rozhraní API CertStore umožňuje aplikaci vysoké úrovně spravovat certifikáty pro použití při síťovém ověřování. Nástroj az sphere device certificate umožňuje spravovat certifikáty z příkazového řádku.

Certifikáty se ukládají v nevolatilovém úložišti na zařízení Azure Sphere. Úložiště certifikátů neboli úložiště certifikátů může obsahovat až 24 KiB certifikátů. Maximální velikost certifikátu je 8 KiB. Certifikáty kořenové certifikační autority jsou obvykle větší než klientské certifikáty. Kromě použití úložiště certifikátů můžete také získat přístup k klientskému certifikátu spravovanému Microsoftem. Klientský certifikát spravovaný Microsoftem bude k dispozici pouze v případě, že je zařízení připojené k internetu alespoň jednou za 24 hodin.

Použití klientského certifikátu spravovaného Microsoftem

Pomocí těchto dvou funkcí můžete získat klientský certifikát a určit, jestli je připravený k použití.

  • DeviceAuth_GetCertificatePath vrátí cestu k souboru ke klientskému certifikátu spravovanému operačním systémem. Tuto cestu k souboru vyžadují některé knihovny k načtení certifikátu pro komunikaci tls.

  • Application_IsDeviceAuthReady ověřte, jestli je ověřování zařízení pro aktuální aplikaci připravené.

Požadavky na CertStore

Aplikace, které používají rozhraní API CertStore, musí obsahovat příslušné soubory hlaviček a do manifestu aplikace přidat funkci CertStore.

Soubory hlaviček

Zahrňte do projektu hlavičku CertStore:

 #include <applibs\certstore.h>

Nastavení manifestu aplikace

Pokud chcete používat rozhraní API úložiště certifikátů, musíte do manifestu CertStore aplikace přidat schopnost aplikace a nastavit hodnotu na true. Další podrobnosti o manifestu aplikace najdete v tématu manifestu aplikace Azure Sphere .

{
  "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
  }
}

ID certifikátů

Každý certifikát je přidružený k identifikátoru (ID) certifikátu. ID certifikátu je řetězec o délce 1 až 16 znaků, který jednoznačně identifikuje certifikát na zařízení. Platné znaky jsou 'a'-'z', 'A'-'Z', '0'-'9', spojovník (-). a podtržítko (_). Každé ID certifikátu musí být v celém zařízení jedinečné bez ohledu na typ certifikátu, který identifikuje.

Identifikátor každého certifikátu je uložený v úložišti certifikátů a používá se pro celé zařízení: rozhraní API CertStore , rozhraní API WifiConfig a rozšíření Azure CLI. Pokud tedy načtete certifikát z příkazového řádku, musí všechny aplikace, které dotazují, přesunují nebo odstraňují tento certifikát, používat stejné ID. Podobně platí, že pokud aplikace načte certifikát, musí všechny az sphere příkazy, které s certifikátem manipulují, používat stejné ID. Pokud nainstalujete nový certifikát se stejným ID jako existující certifikát libovolného typu, nový certifikát přepíše stávající certifikát.

Pozor

Vzhledem k tomu, že ID certifikátů jsou pro certifikáty klientské i kořenové certifikační autority systémové, příkaz az sphere nebo volání funkce, které přidává nový certifikát, může přepsat certifikát přidaný dřívějším voláním příkazu nebo funkce, což může způsobit selhání síťového připojení. Důrazně doporučujeme vyvinout jasné postupy aktualizace certifikátů a pečlivě zvolit ID certifikátů.

Přidání certifikátu do úložiště certifikátů

Pokud chcete přidat certifikát do úložiště certifikátů, volá aplikace jednu z následujících funkcí:

  • CertStore_InstallClientCertificate nainstaluje klientský certifikát, který se skládá z veřejného certifikátu a privátního klíče.
  • CertStore_InstallRootCACertificate nainstaluje certifikát kořenové certifikační autority, který se skládá z veřejného certifikátu.

Certifikát musí být na zařízení, aby ho aplikace mohl nainstalovat. Certifikáty musí být v syntaxi PKCS1 nebo PKCS8 a ve formátu .pem, aby se načetly do zařízení Azure Sphere. Získání a nasazení certifikátů pro sítě EAP-TLS popisuje, jak získat certifikáty a načíst je do zařízení. Microsoft nedodává certifikáty.

Instalace certifikátu ho přidá do úložiště certifikátů a zpřístupní ho pro použití při ověřování. V úložišti certifikátů se certifikáty spravují pomocí indexu a dají se načíst pomocí indexu. Rozsah hodnot indexu běží od 0 do (CertStore_GetCertificateCount - 1).

Aplikace může získat ID certifikátu v určitém indexu voláním funkce CertStore_GetCertificateIdentifierAt. Id certifikátu pak může použít ve voláních k získání informací o certifikátu, k přesunutí nebo odstranění certifikátu a k použití certifikátu k ověřování.

Získání informací o certifikátu

Rozhraní API CertStore obsahuje několik funkcí, které vrací informace o uloženém certifikátu:

Při správě životnosti a aktualizací certifikátů jsou užitečné časy mimo předchozí a neschůdné. Podrobnosti najdete v tématu Životní cyklus a prodloužení platnosti certifikátu .

Přejmenování nebo odstranění certifikátu

K přejmenování nebo odstranění certifikátu volá aplikace CertStore_MoveCertificate nebo CertStore_DeleteCertificate.

CertStore_MoveCertificate přejmenuje certifikát změnou ID certifikátu. Vzhledem k tomu, že ID certifikátů musí být na zařízení jedinečná, přejmenování certifikátu tím, že mu poskytnete stejné ID, jako má jiný certifikát, tento certifikát odstraní. Pokud například úložiště certifikátů obsahuje MyCert a YourCert, výsledkem přechodu MyCert na YourCert je jeden certifikát s ID YourCert, který obsahuje data z předchozí verze MyCert. Nevrátí se žádná chyba.

CertStore_DeleteCertificate odstraní jeden certifikát. Odstranění certifikátu způsobí, že se zbývající certifikáty znovu indexují, a to počínaje číslem 0. Proto pokud chcete odstranit všechny certifikáty v úložišti certifikátů, musíte v každé iteraci použít smyčku na základě počtu certifikátů, ale odstranit certifikát v indexu 0. Pokud se pokusíte odstranit certifikát v indexu, který se už nepoužívá, vrátí CertStore_GetCertificateIdentifierAt ERANGE.

Následující metoda funguje správně:

for (int i = 0; i < CertStore_GetCertificateCount(); i++) {
    struct CertStore_Identifier id;
    result = CertStore_GetCertificateIdentifierAt(0, &id);
    CertStore_DeleteCertificate(id.identifier);
}

Použití certifikátu pro síťové ověřování

Rozhraní API WifiConfig poskytuje funkce, které nastavují a vracejí certifikáty, které jsou povolené pro konkrétní konfiguraci Wi-Fi. Podrobnosti o tom, jak může aplikace vysoké úrovně nastavit síť EAP-TLS, která používá certifikáty k ověřování, najdete v tématu Nastavení sítě EAP-TLS v aplikaci .

Ukázka certifikátu

Ukázková aplikace Certifikáty ukazuje, jak může aplikace používat funkce CertStore.