authentification mutuelle dans un Service de sockets Windows avec SCP
Les rubriques de cette section incluent des exemples de code qui montrent comment effectuer une authentification mutuelle avec un service qui se publie lui-même à l’aide d’un point de connexion de service (SCP). les exemples sont basés sur un service de sockets Microsoft Windows qui utilise un package SSPI pour gérer la négociation de l’authentification mutuelle entre un client et le service. Utilisez les procédures suivantes pour implémenter l’authentification mutuelle dans ce scénario.
Pour inscrire des noms de principal du service dans un répertoire lors de l’installation d’un service
- Appelez la fonction DsGetSpn pour composer des noms de principal du service (SPN) pour le service.
- Appelez la fonction DsWriteAccountSpn pour enregistrer les noms de principal du service sur le compte de service ou le compte d’ordinateur dans le contexte duquel le service s’exécutera. Cette étape doit être effectuée par un administrateur de domaine. une exception est qu’un service s’exécutant sous le compte LocalSystem peut inscrire son SPN au format « / < host > » sur le compte d’ordinateur de l’hôte de service.
Pour vérifier la configuration au démarrage du service
- Vérifiez que les SPN appropriés sont enregistrés sur le compte sous lequel le service est en cours d’exécution. Pour plus d’informations, consultez tâches de maintenance de compte d’ouverture de session.
Pour authentifier le service au démarrage du client
- Récupérez les données de connexion du point de connexion de service du service.
- Établissez une connexion au service.
- Appelez la fonction DsMakeSpn pour composer un SPN pour le service. Composez le nom de principal du service à partir de la chaîne de classe de service connue et les données récupérées à partir du point de connexion de service. Ces données incluent le nom d’hôte du serveur sur lequel le service est en cours d’exécution. N’oubliez pas que le nom d’hôte doit être un nom DNS.
- Utilisez un package de sécurité SSPI pour effectuer l’authentification :
- Appelez la fonction AcquireCredentialsHandle pour obtenir les informations d’identification du client.
- Transmettez les informations d’identification du client et le SPN à la fonction InitializeSecurityContext pour générer un objet blob de sécurité à envoyer au service à des fins d’authentification. Définissez l’indicateur d’authentification _ _ mutuelle _ d’ISC req pour demander l’authentification mutuelle.
- Exchange les objets blob avec le service jusqu’à ce que l’authentification soit terminée.
- Vérifiez le masque des fonctionnalités renvoyées pour l’indicateur d’authentification _ _ mutuelle _ req req pour vérifier que l’authentification mutuelle a été effectuée.
- Si l’authentification a réussi, échangez le trafic avec le service authentifié. Utilisez la signature numérique pour vous assurer que les messages entre le client et le service n’ont pas été falsifiés. À moins que les exigences en matière de performances ne soient graves, utilisez le chiffrement. Pour plus d’informations et pour obtenir un exemple de code qui montre comment utiliser les fonctions MakeSignature, VerifySignature, EncryptMessageet DecryptMessage dans un package SSPI, consultez garantie de l’intégrité des communications pendant la Exchange des messages.
Pour authentifier le client par le service lorsqu’un client se connecte
- Chargez un package de sécurité SSPI qui prend en charge l’authentification mutuelle.
- Lorsqu’un client se connecte, utilisez le package de sécurité pour effectuer l’authentification :
- Appelez la fonction AcquireCredentialsHandle pour obtenir les informations d’identification du service.
- Transmettez les informations d’identification du service et l’objet blob de sécurité reçues du client à la fonction AcceptSecurityContext pour générer un objet blob de sécurité à renvoyer au client.
- Exchange les objets blob avec le client jusqu’à ce que l’authentification soit terminée.
- Vérifiez le masque des fonctionnalités renvoyées pour l’indicateur d’authentification _ _ mutuelle _ ASC RET afin de vérifier que l’authentification mutuelle a été effectuée.
- Si l’authentification a réussi, échangez le trafic avec le client authentifié. Utilisez la signature numérique et le chiffrement, sauf si les performances sont un problème.
Pour plus d’informations et pour obtenir un exemple de code pour ce scénario d’authentification mutuelle, consultez :
- comment un Client authentifie un Service de sockets Windows basé sur SCP
- composition et inscription de spn pour un Service de sockets Windows basé sur SCP
- comment un Service de sockets Windows authentifie un Client
Pour plus d’informations, consultez :