Gérer les certificats dans les applications de haut niveau

L’API CertStore permet à une application générale de gérer les certificats à utiliser dans l’authentification réseau. Le certificat az sphere device vous permet de gérer les certificats à partir de la ligne de commande.

Les certificats sont stockés dans un stockage non volatile sur l’appareil Azure Sphere. Le magasin de certificats, ou magasin de certificats, peut contenir jusqu’à 24 Kio de certificats. La taille maximale d’un certificat est de 8 Kio. Les certificats d’autorité de certification racine sont généralement plus volumineux que les certificats clients. En plus d’utiliser le magasin de certificats, vous pouvez également accéder au certificat client géré par Microsoft. Le certificat client géré par Microsoft ne peut être utilisé que lorsque l’appareil est connecté à Internet au moins une fois toutes les 24 heures.

Utiliser le certificat client géré par Microsoft

Utilisez ces deux fonctions pour obtenir un certificat client et déterminer s’il est prêt à être utilisé.

  • DeviceAuth_GetCertificatePath retourne un chemin d’accès à un certificat client géré par le système d’exploitation. Ce chemin de fichier est requis par certaines bibliothèques pour charger un certificat pour les communications TLS.

  • Application_IsDeviceAuthReady vérifier si l’authentification de l’appareil pour l’application actuelle est prête.

Configuration requise pour CertStore

Les applications qui utilisent l’API CertStore doivent inclure les fichiers d’en-tête appropriés et ajouter la fonctionnalité CertStore au manifeste de l’application.

Fichiers d’en-tête

Incluez l’en-tête CertStore dans votre projet :

 #include <applibs\certstore.h>

Paramètres du manifeste d’application

Pour utiliser les API du magasin de certificats, vous devez ajouter la CertStore fonctionnalité d’application au manifeste de l’application et définir la valeur sur true. La rubrique manifeste d’application Azure Sphere contient plus de détails sur le manifeste de l’application.

{
  "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 de certificat

Chaque certificat est associé à un identificateur de certificat (ID). L’ID de certificat est une chaîne de 1 à 16 caractères qui identifie de façon unique le certificat sur l’appareil. Les caractères valides sont « a'-'z', 'A'-'Z', '0'-'9', trait d’union (-). et trait de soulignement (_). Chaque ID de certificat doit être unique sur l’appareil, quel que soit le type de certificat qu’il identifie.

L’identificateur de chaque certificat est enregistré dans le magasin de certificats et est utilisé à l’échelle de l’appareil : par l’API CertStore , l’API WifiConfig et l’extension Azure CLI. Par conséquent, si vous chargez un certificat à partir de la ligne de commande, toutes les applications qui interrogent, déplacent ou suppriment ce certificat doivent utiliser le même ID. De même, si une application charge le certificat, toutes az sphere les commandes qui manipulent le certificat doivent utiliser le même ID. Si vous installez un nouveau certificat avec le même ID qu’un certificat existant de tout type, le nouveau certificat remplacera celui existant.

Attention

Étant donné que les ID de certificat sont à l’échelle du système pour les certificats client et d’autorité de certification racine, une commande az sphere ou un appel de fonction qui ajoute un nouveau certificat peut remplacer un certificat qui a été ajouté par une commande ou un appel de fonction antérieur, ce qui peut entraîner des échecs de connexion réseau. Nous vous recommandons vivement de développer des procédures de mise à jour de certificat claires et de choisir soigneusement les ID de certificat.

Ajouter un certificat au magasin de certificats

Pour ajouter un certificat au magasin de certificats, une application appelle l’une des fonctions suivantes :

  • CertStore_InstallClientCertificate installe un certificat client, qui se compose d’un certificat public et d’une clé privée
  • CertStore_InstallRootCACertificate installe un certificat d’autorité de certification racine, qui se compose d’un certificat public

Le certificat doit être présent sur l’appareil pour que l’application puisse l’installer. Les certificats doivent être dans la syntaxe PKCS1 ou PKCS8 et le format .pem à charger sur l’appareil Azure Sphere. Acquérir et déployer des certificats pour les réseaux EAP-TLS décrit comment acquérir des certificats et les charger sur un appareil. Microsoft ne fournit pas de certificats.

L’installation d’un certificat l’ajoute au magasin de certificats et le rend disponible pour l’authentification. Dans le magasin de certificats, les certificats sont gérés par index et peuvent être récupérés par index. La plage de valeurs d’index s’exécute de 0 à (CertStore_GetCertificateCount - 1).

Une application peut obtenir l’ID du certificat à un index particulier en appelant la fonction CertStore_GetCertificateIdentifierAt. Il peut ensuite utiliser l’ID de certificat dans les appels pour obtenir des informations sur le certificat, pour déplacer ou supprimer le certificat et pour utiliser un certificat pour l’authentification.

Obtenir des informations sur le certificat

L’API CertStore inclut plusieurs fonctions qui retournent des informations sur un certificat stocké :

Les heures not-before et not-after sont utiles pour gérer la durée de vie et les mises à jour des certificats. Pour plus d’informations, consultez Cycle de vie et renouvellement des certificats.

Renommer ou supprimer un certificat

Pour renommer ou supprimer un certificat, une application appelle CertStore_MoveCertificate ou CertStore_DeleteCertificate.

CertStore_MoveCertificate renomme un certificat en modifiant son ID de certificat. Étant donné que les ID de certificat doivent être uniques sur un appareil, renommer un certificat en lui donnant le même ID qu’un autre certificat supprime ce certificat. Par exemple, si le magasin de certificats contient MyCert et YourCert, le déplacement MyCert vers aboutit à YourCert un certificat unique avec l’ID YourCert, qui contient les données de l’ancien MyCert. Aucune erreur n’est retournée.

CertStore_DeleteCertificate supprime un seul certificat. La suppression d’un certificat entraîne la réindexation des certificats restants, à partir de 0. Par conséquent, pour supprimer tous les certificats dans le magasin de certificats, vous devez effectuer une boucle en fonction du nombre de certificats, mais supprimer le certificat à l’index 0 dans chaque itération. Si vous essayez de supprimer un certificat au niveau d’un index qui n’est plus utilisé, CertStore_GetCertificateIdentifierAt retourne ERANGE.

La méthode suivante fonctionne correctement :

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

Utiliser un certificat pour l’authentification réseau

L’API WifiConfig fournit des fonctions qui définissent et retournent les certificats activés pour une configuration Wi-Fi particulière. Consultez Configurer un réseau EAP-TLS dans une application pour plus d’informations sur la façon dont une application de haut niveau peut configurer un réseau EAP-TLS qui utilise des certificats pour l’authentification.

Exemple de certificat

L’exemple d’application Certificats montre comment une application peut utiliser les fonctions CertStore.