Share via


Unicité des noms SPN et UPN

S’applique à : Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012

Auteur : Justin Turner, ingénieur support senior d’escalade auprès du groupe Windows

Notes

Ce contenu est écrit par un ingénieur du support client Microsoft et est destiné aux administrateurs expérimentés et aux architectes système qui recherchent des explications techniques plus approfondies des fonctionnalités et des solutions Windows Server 2012 R2 que n'en proposent généralement les rubriques de TechNet. Toutefois, il n'a pas subi les mêmes passes de correction. De ce fait, une partie du langage peut sembler moins finalisée que le contenu de TechNet.

Vue d’ensemble

Les contrôleurs de domaine exécutant Windows Server 2012 R2 bloquent la création de noms de principal du service (SPN) et de noms d’utilisateurs principaux (UPN) en double. Cela inclut savoir si la restauration ou la réanimation d’un objet supprimé ou le renommage d’un objet entraînerait un doublon.

Contexte

Les noms de principal de service (SPN) dupliqués se produisent couramment, entraînant des échecs d’authentification et pouvant causer une utilisation excessive du processeur LSASS. Il n’existe aucune méthode prête à l’emploi pour bloquer l’ajout d’un SPN ou d’un UPN en double. *

Les valeurs UPN en double interrompent la synchronisation entre AD local et Office 365.

*Setspn.exe est couramment utilisé pour créer de nouveaux SPN et a été intégré fonctionnellement à la version publiée avec Windows Server 2008 qui ajoute une vérification des doublons.

Table SEQ Table \* ARABIC 1 : Unicité d’UPN et de SPN

Fonctionnalité Commentaire
Unicité de l’UPN Les UPN doubles interrompent la synchronisation des comptes AD locaux avec des services Microsoft Entra ID comme Office 365.
Unicité du SPN Kerberos nécessite des SPN pour l’authentification mutuelle. Les SPN dupliqués entraînent des échecs d’authentification.

Pour plus d’informations sur les exigences d’unicité pour les UPN et les SPN, consultez Contraintes d’unicité.

Symptômes

Les codes d’erreur 8467 ou 8468 ou leurs équivalents hexadécimaux, symboliques ou au format chaîne sont enregistrés dans différentes boîtes de dialogue à l’écran et dans l’ID d’événement 2974 dans le journal des événements des services d’annuaire. La tentative de création d’un UPN ou d’un SPN en double est bloquée uniquement dans les circonstances suivantes :

  • L’écriture est traitée par un contrôleur de domaine Windows Server 2012 R2

Table SEQ Table \* ARABIC 2 : Codes d’erreur d’unicité d’UPN et de SPN

Decimal Hex Symbolique String
8647 21C7 ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST L’opération a échoué, car la valeur SPN fournie pour l’ajout/modification n’est pas unique à l’échelle de la forêt.
8648 21C8 ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST L’opération a échoué, car la valeur UPN fournie pour l’ajout/modification n’est pas unique à l’échelle de la forêt.

Échec de la création d’un utilisateur si l’UPN n’est pas unique

DSA.msc

Le nom d’ouverture de session utilisateur que vous avez choisi est déjà utilisé dans cette entreprise. Choisissez un autre nom de connexion, puis réessayez.

Screenshot that shows a message that says the logon name you have chosen is already in use.

Modifier un compte existant :

Le nom de connexion utilisateur spécifié existe déjà dans l’entreprise. Spécifiez-en un nouveau, en modifiant le préfixe ou en sélectionnant un suffixe différent dans la liste.

Screenshot that shows a message that says the logon name you used already exists in the enterprise.

Centre d’administration Active Directory (DSAC.exe)

Une tentative de création d’un utilisateur dans le Centre d’administration Active Directory avec un UPN qui existe déjà retourne l’erreur suivante.

Screenshot that shows a message that says the new user was not created.

Figure SEQ Figure \* Erreur ARABIC 1 affichée dans le Centre d’administration AD lorsque la création d’un nouvel utilisateur échoue en raison d’un UPN en double

Source de l’événement 2974 : ActiveDirectory_DomainService

Screenshot that shows

Figure SEQ Figure \* ID d’événement ARABIC 2 2974 avec l’erreur 8648

L’événement 2974 répertorie la valeur qui a été bloquée et une liste d’un ou plusieurs objets (jusqu’à 10) qui contiennent déjà cette valeur. Dans la figure suivante, vous pouvez voir que la valeur de l’attribut UPN dhunt@blue.contoso.com existe déjà sur quatre autres objets. Étant donné qu’il s’agit d’une nouvelle fonctionnalité dans Windows Server 2012 R2, la création accidentelle d’UPN et de SPN en double dans un environnement mixte se produit toujours lorsque les contrôleurs de domaine de bas niveau traitent la tentative d’écriture.

Screenshot that shows ARABIC 2 Event ID 2974 with error 8648.

Figure SEQ Figure \* Événement ARABIC 3 Event 2974 montrant tous les objets contenant l’UPN en double

Conseil

Passez régulièrement en revue les ID d’événement 2974 pour :

  • identifier les tentatives de création d’UPN ou de SPN en double
  • identifier les objets qui contiennent déjà des doublons

8648 = « L’opération a échoué, car la valeur UPN fournie pour l’ajout/modification n’est pas unique à l’échelle de la forêt. »

SetSPN :

Setspn.exe dispose d’une détection de SPN en double intégrée depuis Windows Server 2008 lors de l’utilisation de l’option « -S ». Vous pouvez toutefois contourner la détection des SPN en double à l’aide de l’option « -A ». La création d’un SPN en double est bloquée lors du ciblage d’un contrôleur de domaine Windows Server 2012 R2 à l’aide de SetSPN avec l’option -A. Le message d’erreur affiché est le même que celui affiché lors de l’utilisation de l’option -S : « SPN dupliqué trouvé, abandon de l’opération ! »

ADSIEDIT :

Operation failed. Error code: 0x21c8
The operation failed because UPN value provided for addition/modification is not unique forest-wide.
000021C8: AtrErr: DSID-03200BBA, #1: 0: 000021C8: DSID-03200BBA, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 90290 (userPrincipalName)

Screenshot that shows that the operation failed with error code 0x21c8.

Figure SEQ Figure \* Message d’erreur ARABIC 4 affiché dans ADSIEdit lorsque l’ajout de l’UPN en double est bloqué

Windows PowerShell

Windows Server 2012 R2 :

Screenshot that shows a message indicating that the operation failed.

PowerShell s’exécutant à partir de Server 2012 ciblant un contrôleur de domaine Windows Server 2012 R2 :

Screenshot that shows an unknown error.

DSAC.exe s’exécutant sur Windows Server 2012 ciblant un contrôleur de domaine Windows Server 2012 R2 :

Screenshot that shows a user creation error on non-Windows Server 2012 R2 while targeting Windows Server 2012 R2 DC.

Figure SEQ Figure \* Erreur ARABIC 5 de création d’utilisateur DSAC sur une instance non Windows Server 2012 R2 lors du ciblage du contrôleur de domaine Windows Server 2012 R2

Screenshot that shows a user modification error on non-Windows Server 2012 R2 while targeting Windows Server 2012 R2 DC.

Figure SEQ Figure \* Erreur ARABIC 6 de modification de l’utilisateur DSAC sur une instance non Windows Server 2012 R2 lors du ciblage du contrôleur de domaine Windows Server 2012 R2

La restauration d’un objet qui entraînerait l’échec d’un UPN en double :

Screenshot that shows how to restore an object.

Screenshot that shows that the operation failed because the UPN value provided for addition/modification is not unique forest-wide.

Aucun événement n’est journalisé lorsqu’un objet ne parvient pas à être restauré en raison d’un UPN/SPN en double.

L’UPN de l’objet doit être unique pour pouvoir être restauré.

  1. Identifier l’UPN qui existe sur l’objet dans la Corbeille

  2. Identifier tous les objets qui ont la même valeur

  3. Supprimer le ou les UPN dupliqués

Identifier l’UPN en conflit sur l’objet supprimé avec repadmin.exe

Repadmin /showattr DCName "DN of deleted objects container" /subtree /filter:"(msDS-LastKnownRDN=<NAME>)" /deleted /atts:userprincipalname
repadmin /showattr DCName "CN=Deleted Objects,DC=blue,DC=contoso,DC=com" /subtree /filter:"(msDS-LastKnownRDN=Dianne Hunt2)" /deleted /atts:userprincipalname

C:\>repadmin /showattr winbluedc1 "cn=deleted objects,dc=blue,dc=contoso,dc=com" /subtree /filter:"(msds-lastknownrdn=Dianne Hunt2)" /deleted /atts:userprincipalname
DN: CN=Dianne Hunt2\0ADEL:dd3ab8a4-3005-4f2f-814f-d6fc54a1a1c0,CN=Deleted Object
s,DC=blue,DC=contoso,DC=com
    1> userPrincipalName: dhunt@blue.contoso.com

Pour identifier tous les objets avec le même UPN : avec Repadmin.exe

repadmin /showattr WinBlueDC1 "DC=blue,DC=contoso,DC=com" /subtree /filter:"(userPrincipalName=dhunt@blue.contoso.com)" /deleted /atts:DN

C:\>repadmin /showattr winbluedc1 "dc=blue,dc=contoso,dc=com" /subtree /filter:"(userPrincipalName=dhunt@blue.contoso.com)" /deleted /atts:DN
DN: CN=Administrator,CN=Users,DC=blue,DC=contoso,DC=com
DN: CN=xouser1,CN=Users,DC=blue,DC=contoso,DC=com
DN: CN=xouser10,CN=Users,DC=blue,DC=contoso,DC=com
DN: CN=xouser100,CN=Users,DC=blue,DC=contoso,DC=com
DN: CN=Dianne Hunt,OU=Marketing,DC=blue,DC=contoso,DC=com
DN: CN=Dianne Hunt2\0ADEL:dd3ab8a4-3005-4f2f-814f-d6fc54a1a1c0,CN=Deleted Objects,DC=blue,DC=contoso,DC=com

Conseil

Le paramètre /deleted précédemment non documenté dans repadmin.exe est utilisé pour inclure des objets supprimés dans le jeu de résultats

  • Ouvrez le Centre d’administration Active Directory et accédez à Recherche globale

  • Sélectionnez la case d’option Convertir en LDAP

  • Entrez (userPrincipalName=ConflictingUPN)

    • Remplacez ConflictingUPN par l’UPN réel en conflit
  • Sélectionnez Appliquer

Screenshot that shows the Global Search page.

Utilisation de Windows PowerShell

Get-ADObject -LdapFilter "(userPrincipalName=dhunt@blue.contoso.com)" -IncludeDeletedObjects -SearchBase "DC=blue,DC=Contoso,DC=com" -SearchScope Subtree -Server winbluedc1.blue.contoso.com

SPN and UPN uniqueness

Si l’objet doit être restauré, vous devez supprimer les UPN dupliqués des autres objets. Pour un seul objet, il est assez simple d’utiliser ADSIEdit pour supprimer le doublon. S’il existe plusieurs objets avec des doublons, Windows PowerShell peut être le meilleur outil à utiliser.

Pour annuler l’attribut UserPrincipalName à l’aide de Windows PowerShell :

Screenshot that shows the operation failed with error code 0x21c7.

Note

L’attribut userPrincipalName étant un attribut à valeur unique, cette procédure supprime uniquement l’UPN en double.

SPN dupliqué

Screenshot that shows the error message displayed in ADSIEdit when addition of duplicate SPN is blocked.

Figure SEQ Figure \* Message d’erreur ARABIC 8 affiché dans ADSIEdit lorsque l’ajout du SPN en double est bloqué

Un ID d’événement ActiveDirectory_DomainService2974 est journalisé dans le journal des événements des services d’annuaire.

Operation failed. Error code: 0x21c7
The operation failed
The attribute value provided is not unique in the forest or partition. Attribute:
servicePrincipalName Value=<SPN>
<Object DN> Winerror: 8467

Screenshot that shows the error logged when creation of duplicate SPN is blocked.

Figure SEQ Figure \* Erreur ARABIC 9 enregistrée lorsque la création du SPN en double est bloquée

Workflow

  • Si DC == GC

    • Aucun appel offbox requis, la requête peut être satisfaite localement

    • Cas UPN

      • Interroger l’index UPN local à l’échelle de la forêt pour l’UPN fourni (userPrincipalName ; index global)

        • Si entrées retournées == 0 -> l’écriture continue

        • Si entrées retournées !=0 -> l’écriture échoue

          • Événement journalisé

          • Retourne également l’erreur étendue :

            • 8648 :

              ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST

    • Cas SPN

      • Interroger l’index SPN local à l’échelle de la forêt pour le SPN fourni (servicePrincipalName ; index global)

        • Si entrées retournées == 0 -> l’écriture continue

        • Si entrées retournées !=0 -> l’écriture échoue

          • Événement journalisé

          • Retourne également l’erreur étendue :

            • 8647 :

              ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST

  • Si DC != GC

    • Appel offbox souhaitable mais pas critique, c’est-à-dire qu’il s’agit d’une vérification de l’unicité de meilleur effort

      • Vérifiez le produit par rapport au DIT local uniquement si le GC ne peut pas être localisé

      • Événement journalisé pour indiquer ce type

    • Cas UPN

      • Envoyer une requête LDAP par rapport au GC le plus proche ? interroger l’index UPN à l’échelle de la forêt du GC pour obtenir l’UPN fourni (userPrincipalName ; index global)

        • Si entrées retournées == 0 -> l’écriture continue

        • Si entrées retournées !=0 -> l’écriture échoue

          • Événement journalisé

          • Retourne également l’erreur étendue :

            • 8648 :

              ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST

    • Cas SPN

      • Envoyer une requête LDAP par rapport au GC le plus proche ? interroger l’index SPN à l’échelle de la forêt du GC pour le SPN fourni (servicePrincipalName ; index global)

        • Si entrées retournées == 0 -> l’écriture continue

        • Si entrées retournées !=0 -> l’écriture échoue

          • Événement journalisé

          • Retourne également l’erreur étendue :

            • 8647 :

              ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST

Lorsque des objets supprimés sont réanimés, les valeurs de SPN ou UPN présentes sont vérifiées pour l’unicité. Si un doublon est trouvé, la demande échoue.

  • Pour certaines modifications d’attributs comme le nom d’hôte DNS, le nom du compte SAM, etc., lorsque la modification est effectuée, les noms de service sont mis à jour en conséquence. Au passage, les SPN obsolètes sont supprimés, et de nouveaux noms de service sont construits et ajoutés à la base de données. Les modifications d’attribut requises pour lesquelles ce chemin d’accès est déclenché sont les suivantes :

    • ATT_DNS_HOST_NAME

    • ATT_MS_DS_ADDITIONAL_DNS_HOST_NAME

    • ATT_SAM_ACCOUNT_NAME

    • ATT_MS_DS_ADDITIONAL_SAM_ACCOUNT_NAME

    • ATT_SERVER_REFERENCE_BL

    • ATT_USER_ACCOUNT_CONTROL

Si l’une des nouvelles valeurs SPN est un doublon, la modification échoue. Dans la liste ci-dessus, les attributs importants sont ATT_DNS_HOST_NAME (Nom de l’ordinateur) et ATT_SAM_ACCOUNT_NAME (Nom du compte SAM).

Try This : Exploration de l’unicité du SPN et de l’UPN

Il s’agit de la première des activités « Try This » dans le module. Il n’existe pas de guide lab distinct pour ce module. Les activités Try This sont des activités de forme libre qui vous permettent d’explorer le matériel de leçon dans l’environnement lab. Vous avez la possibilité de suivre l’invite ou de désactiver le script et de créer votre propre activité.

Remarque

  • Il s’agit de la première de plusieurs activités « Try This ».
  • Il n’existe pas de guide lab distinct pour ce module.
  • Les activités Try This sont essentiellement des activités de forme libre qui vous permettent d’explorer le matériel de leçon dans l’environnement lab.
  • Vous avez la possibilité de suivre l’invite ou de désactiver le script et de créer votre propre activité.
  • Bien que toutes les sections n’aient pas d’invite Try This, nous vous encourageons à explorer le contenu de la leçon dans le lab, le cas échéant.

Expérimentez l’unicité du SPN et de l’UPN. Suivez ces invites ou procédez à votre convenance.

  1. Créer de nouveaux utilisateurs avec un UPN

  2. Créer des comptes avec des SPN

  3. Créer un utilisateur avec un UPN déjà défini ou modifiez l’UPN d’un compte existant. En faire de même pour un SPN sur un autre compte

    1. Remplir un compte d’utilisateur existant avec un UPN déjà utilisé

      1. Avec PowerShell, d’ADSIEDIT ou le Centre d’administration Active Directory (DSAC.exe)
    2. Remplir un compte existant avec un SPN déjà utilisé

      1. Avec Windows PowerShell, ADSIEDIT ou SetSPN
  4. Observer les erreurs

Au choix

  1. Vérifiez auprès de l’instructeur de classe que vous pouvez activer la Corbeille AD dans le Centre d’administration Active Directory. Si c’est le cas, passez à l’étape suivante.

  2. Remplir l’UPN sur un compte d’utilisateur

  3. Supprimer le compte

  4. Remplir un autre compte avec le même UPN que le compte supprimé

  5. Tenter d’utiliser l’interface graphique de la Corbeille pour restaurer le compte

  6. Imaginez que vous recevez l’erreur que vous voyez à l’étape précédente (et vous n’avez pas d’historique des étapes que vous venez d’effectuer). Votre objectif est d’effectuer la restauration du compte. Consultez le classeur pour obtenir des exemples d’étapes.