Résoudre les problèmes d’ouverture de session Windows

Cet article décrit les journaux et les messages d’erreur Windows lorsqu’un utilisateur ouvre une session à l’aide de certificats et/ou de cartes à puce. Ces journaux fournissent des informations que vous pouvez utiliser pour résoudre les échecs d’authentification.

Certificats et infrastructure de clé publique

Windows Active Directory propose plusieurs magasins de certificats qui gèrent les certificats pour les utilisateurs qui ouvrent une session.

  • Magasin de certificats NTAuth : pour s’authentifier auprès de Windows, l’autorité de certification émettant les certificats utilisateur (aucune chaîne n’est prise en charge) doit être placée dans le magasin NTAuth. Pour afficher ces certificats, depuis le programme certutil, entrez : certutil –viewstore –enterprise NTAuth.
  • Magasins de certificats racine et intermédiaires : en règle générale, les systèmes d’ouverture de session par certificat peuvent fournir un seul certificat. Donc, si une chaîne est utilisée, le magasin de certificats intermédiaires sur toutes les machines doit inclure ces certificats. Le certificat racine doit être dans le magasin racine de confiance et l’avant-dernier certificat doit être dans le magasin NTAuth.
  • Extensions de certificat d’ouverture de session et stratégie de groupe : Windows peut être configuré pour appliquer la vérification des EKU et d’autres stratégies de certificat. Consultez la documentation Microsoft : https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ff404287(v=ws.10).
Stratégie du Registre Description
AllowCertificatesWithNoEKU Lorsqu’elle est désactivée, les certificats doivent inclure l’Utilisation améliorée de la clé (EKU) pour l’ouverture de session avec carte à puce.
AllowSignatureOnlyKeys Par défaut, Windows filtre les clés privées de certificats qui ne permettent pas le décryptage RSA. Cette option remplace ce filtre.
AllowTimeInvalidCertificates Par défaut, Windows filtre les certificats expirés. Cette option remplace ce filtre.
EnumerateECCCerts Active l’authentification à courbe elliptique.
X509HintsNeeded Si un certificat ne contient pas de nom d’utilisateur principal (UPN) unique, ou s’il peut être ambigu, cette option permet aux utilisateurs de spécifier manuellement leur compte d’ouverture de session Windows.
UseCachedCRLOnlyAnd, IgnoreRevocationUnknownErrors Désactive la vérification de la révocation des certificats (généralement définie sur le contrôleur de domaine).
  • Certificats du contrôleur de domaine : pour authentifier les connexions Kerberos, tous les serveurs doivent avoir des certificats « Contrôleur de domaine » appropriés. Ils peuvent être demandés depuis le menu du composant logiciel enfichable MMC « Local Computer Certificate Personal Store » (magasin personnel de certificats de l’ordinateur local).

Nom UPN et mappage de certificat

Il est recommandé que les certificats utilisateur incluent un nom d’utilisateur principal (UPN) unique dans l’extension Nom de sujet alternatif.

Noms UPN dans Active Directory

Par défaut, chaque utilisateur d’Active Directory est associé à un UPN implicite, basé sur le modèle <NomUtilisateur_sam>@<NetBios_domaine> et <NomUtilisateur_sam>@<FQDN_domaine>. Les domaines disponibles et les noms de domaine complets sont inclus dans l’entrée RootDSE de la forêt. Veuillez noter qu’un seul domaine peut disposer de plusieurs noms de domaine complets enregistrés dans RootDSE.

En outre, chaque utilisateur d’Active Directory a un nom UPN explicite et des altUserPrincipalNames. Ce sont des entrées LDAP qui spécifient le nom d’utilisateur principal (UPN) pour l’utilisateur.

Lors d’une recherche d’utilisateurs par UPN, Windows recherche d’abord dans le domaine courant (en fonction de l’identité du processus de recherche de l’UPN) les UPN explicites, puis les UPN alternatifs. S’il n’existe pas de correspondance, il recherche l’UPN implicite, qui peut se résoudre sur différents domaines de la forêt.

Service de mappage de certificat

Si un certificat ne contient pas d’UPN explicite, Active Directory peut stocker un certificat public exact pour chaque utilisation dans un attribut « x509certificate ». Pour résoudre un tel certificat pour un utilisateur, un ordinateur peut interroger cet attribut directement (par défaut, dans un seul domaine).

L’utilisateur peut spécifier un compte d’utilisateur qui accélère la recherche et permet également à cette fonctionnalité d’être utilisée dans un environnement inter-domaines.

S’il existe plusieurs domaines dans la forêt et que l’utilisateur ne spécifie pas explicitement un domaine, Active Directory rootDSE spécifie l’emplacement du service de mappage de certificat. Il est généralement situé sur une machine de catalogue global et bénéficie d’une vue en cache de tous les attributs x509certificate de la forêt. Cet ordinateur peut être utilisé pour rechercher efficacement un compte utilisateur dans tout domaine, en se basant uniquement sur le certificat.

Sélection du contrôleur de domaine d’ouverture de session

Lorsqu’un environnement contient plusieurs contrôleurs de domaine, il est utile de voir et de restreindre le contrôleur de domaine qui est utilisé pour l’authentification, de façon à ce que les journaux puissent être activés et récupérés.

Contrôler la sélection du contrôleur de domaine

Pour forcer Windows à utiliser un contrôleur de domaine Windows spécifique pour l’ouverture de session, vous pouvez explicitement définir la liste des contrôleurs de domaine qu’une machine Windows utilise en configurant le fichier lmhosts : \Windows\System32\drivers\etc\lmhosts.

Il existe généralement un exemple de fichier nommé « lmhosts.sam » dans cet emplacement. Il vous suffit d’inclure une ligne :

1.2.3.4 dcnetbiosname #PRE #DOM:mondomaine

Où « 1.2.3.4 » est l’adresse IP du contrôleur de domaine nommé « dcnetbiosname » dans le domaine « mondomaine ».

Après un redémarrage, la machine Windows utilise ces informations pour ouvrir une session sur mondomaine. Notez que cette configuration doit être rétablie lors d’un débogage.

Identifier le contrôleur de domaine utilisé

À l’ouverture de session, Windows définit une variable d’environnement MSDOS avec le contrôleur de domaine qui a ouvert la session de l’utilisateur. Pour la voir, démarrez l’invite de commande avec la commande : echo %LOGONSERVER%.

Les journaux liés à l’authentification sont stockés sur l’ordinateur renvoyé par cette commande.

Activer les événements d’audit de compte

Par défaut, les contrôleurs de domaine Windows n’activent pas les journaux d’audit de compte complets. Ce réglage peut être contrôlé par le biais des stratégies d’audit dans les paramètres de sécurité dans l’éditeur de stratégie de groupe. Une fois qu’ils sont activés, le contrôleur de domaine génère des informations supplémentaires dans le journal d’événements de sécurité.

Image localisée

Journaux de validation de certificat

Vérifier la validité du certificat

Si un certificat de carte à puce est exporté en tant que certificat DER (sans clé privée), vous pouvez le valider avec la commande : certutil –verify user.cer

Activer la journalisation CAPI

Sur le contrôleur de domaine et les machines utilisateur, ouvrez l’observateur d’événements et activez la journalisation pour Microsoft/Windows/CAPI2/Operational Logs.

Vous pouvez contrôler la journalisation CAPI avec les clés de registre dans : CurrentControlSet\Services\crypt32.

Valeur Description
DiagLevel (DWORD) Niveau de détail (0 à 5)
DiagMatchAnyMask (QUADWORD) Filtre d’événements (utiliser 0xffffff pour tout)
DiagProcessName (MULTI_SZ) Filtre par nom du processus (par exemple, LSASS.exe)

Journaux CAPI

Message Description
Build Chain CertGetCertificateChain appelé par LSA (comprend résultat)
Verify Revocation CertVerifyRevocation appelé par LSA (comprend résultat)
X509 Objects En mode détaillé, les certificats et les listes de révocation de certificats (CRL) sont placés dans AppData\LocalLow\Microsoft\X509Objects
Verify Chain Policy CertVerifyChainPolicy appelé par LSA (comprend paramètres)

Messages d’erreur

Code d’erreur Description
Certificat non approuvé Le certificat de carte à puce n’a pas pu être créé à l’aide de certificats contenus dans les magasins de certificats racine approuvés et intermédiaires de l’ordinateur.
Erreur de vérification de la révocation de certificats La liste de révocation de certificats pour la carte à puce n’a pas pu être téléchargée à partir de l’adresse spécifiée par le point de distribution de la liste de révocation de certificat. Si la vérification de la révocation des certificats est obligatoire, l’ouverture de session échoue. Consultez la section Certificats et infrastructure de clé publique.
Erreurs d’utilisation de certificat Le certificat n’est pas approprié pour l’ouverture de session. Par exemple, il peut s’agir d’un certificat de serveur ou d’un certificat de signature.

Journaux Kerberos

Pour activer la journalisation Kerberos, sur le contrôleur de domaine et la machine utilisateur, créez les valeurs de registre suivantes :

Ruche Nom de la valeur Valeur [DWORD]
CurrentControlSet\Control\Lsa\Kerberos\Parameters LogLevel 0x1
CurrentControlSet\Control\Lsa\Kerberos\Parameters KerbDebuglevel 0xffffffff
CurrentControlSet\Services\Kdc KdcDebugLevel 0x1
CurrentControlSet\Services\Kdc KdcExtraLogLevel 0x1f

La journalisation Kerberos est écrite dans le journal d’événements système.

  • Les messages tels que « certificat non approuvé » (untrusted certificate) devraient être faciles à diagnostiquer.
  • Deux codes d’erreur sont des messages d’informations et peuvent être ignorés :
    • KDC_ERR_PREAUTH_REQUIRED (utilisé pour la rétrocompatibilité avec les contrôleurs de domaine plus anciens)
    • Erreur inconnue 0x4b

Messages des journaux d’événements

Cette section décrit les entrées de journal attendues sur le contrôleur de domaine et la station de travail lorsque l’utilisateur ouvre une session avec un certificat.

  • Journal CAPI2 du contrôleur de domaine
  • Journaux de sécurité du contrôleur de domaine
  • Journal de sécurité Virtual Delivery Agent (VDA)
  • Journal CAPI VDA
  • Journal système VDA

Journal CAPI2 du contrôleur de domaine

Lors d’une ouverture de session, le contrôleur de domaine valide le certificat de l’appelant, produisant une séquence d’entrées de journal comme illustré ci-dessous.

Image localisée

Le dernier message du journal d’événements indique que lsass.exe sur le contrôleur de domaine construit une chaîne en fonction du certificat fourni par le VDA et vérifie sa validité (y compris la révocation). Le résultat est « ERROR_SUCCESS ».

Image localisée

Journal de sécurité du contrôleur de domaine

Le contrôleur de domaine présente une séquence des événements d’ouverture de session, l’événement clé étant 4768, dans lequel le certificat est utilisé pour émettre le ticket Kerberos Ticket Granting (krbtgt).

Les messages précédents indiquent que le compte de machine du serveur s’authentifie auprès du contrôleur de domaine. Les messages suivants indiquent le compte d’utilisateur appartenant au nouveau krbtgt utilisé pour s’authentifier auprès du contrôleur de domaine.

Image localisée

Journal de sécurité VDA

Le journal d’audit de sécurité VDA correspondant à l’événement d’ouverture de session est l’entrée avec l’ID 4648, provenant de winlogon.exe.

Image localisée

Journal CAPI VDA

Cet exemple de journal CAPI VDA présente une séquence de création de chaîne et de vérification depuis lsass.exe, validant le certificat du contrôleur de domaine (dc.citrixtest.net).

Image localisée

Image localisée

Journal système VDA

Lorsque l’ouverture de session Kerberos est activée, le journal système affiche l’erreur KDC_ERR_PREAUTH_REQUIRED (qui peut être ignorée) et une entrée de Winlogon, indiquant que l’ouverture de session Kerberos a réussi.

Image localisée

Journaux d’événements

Les tableaux suivants répertorient les entrées de journal d’événements générées par FAS.

Événements d’administration du [Service d’authentification fédérée]

[Source de l’événement : Citrix.Authentication.FederatedAuthenticationService]

Ces événements sont consignés en réponse à une modification de la configuration du serveur FAS.

Codes de journal
[S001] ACCESS DENIED: User [{0}] is not a member of Administrators group
[S002] ACCESS DENIED: User [{0}] is not an Administrator of Role [{1}]
[S003] Administrator [{0}] setting Maintenance Mode to [{1}]
[S004] Administrator [{0}] enrolling with CA [{1}] templates [{2} and {3}]
[S005] Administrator [{0}] de-authorizing CA [{1}]
[S006] Administrator [{0}] creating new Certificate Definition [{1}]
[S007] Administrator [{0}] updating Certificate Definition [{1}]
[S008] Administrator [{0}] deleting Certificate Definition [{1}]
[S009] Administrator [{0}] creating new Role [{1}]
[S010] Administrator [{0}] updating Role [{1}]
[S011] Administrator [{0}] deleting Role [{1}]
[S012] Administrator [{0}] creating certificate [upn: {1} sid: {2} role: {3}][Certificate Definition: {4}][Security Context: {5}]
[S013] Administrator [{0}] deleting certificates [upn: {1} role: {2} Certificate Definition: {3} Security Context: {4}]
[S015] Administrator [{0}] creating certificate request [TPM: {1}]
[S016] Administrator [{0}] importing Authorization certificate [Reference: {1}]
[S050] Administrator [{0}] creating new cloud configuration: [{1}]
[S051] Administrator [{0}] updating cloud configuration: [{1}]
[S052] Administrator [{0}] removing cloud configuration
Codes de journal
[S401] Performing configuration upgrade – [From version {0}][to version {1}]
[S402] ERROR: The Citrix Federated Authentication Service must be run as Network Service [currently running as: {0}]
[S404] Forcefully erasing the Citrix Federated Authentication Service database
[S405] An error occured while migrating data from the registry to the database: [{0}]
[S406] Migration of data from registry to database is complete (note: user certificates are not migrated)
[S407] Registry-based data was not migrated to a database since a database already existed
[S408] Cannot downgrade the configuration – [From version {0}][to version {1}]
[S409] ThreadPool MinThreads adjusted from [workers: {0} completion: {1}] to: [workers: {2} completion: {3}]
[S410] Failed to adjust ThreadPool MinThreads from [workers: {0} completion: {1}] to: [workers: {2} completion: {3}]
[S411] Error starting the FAS service: [{0}]

Création d’assertions d’identité [Service d’authentification fédérée]

[Source de l’événement : Citrix.Authentication.FederatedAuthenticationService]

Ces événements sont journalisés au moment de l’exécution sur le serveur FAS lorsqu’un serveur approuvé assume l’ouverture de session d’un utilisateur.

Codes de journal
[S101] Server [{0}] is not authorized to assert identities in role [{1}]
[S102] Server [{0}] failed to assert UPN [{1}] (Exception: {2}{3})
[S103] Server [{0}] requested UPN [{1}] SID {2}, but lookup returned SID {3}
[S104] Server [{0}] failed to assert UPN [{1}] (UPN not allowed by role [{2}])
[S105] Server [{0}] issued identity assertion [upn: {1}, role {2}, Security Context: [{3}]]
[S120] Issuing certificate to [upn: {0} role: {1} Security Context: [{2}]]
[S121] Certificate issued to [upn: {0} role: {1}] by [certifcate authority: {2}]
[S122] Warning: Server is overloaded [upn: {0} role: {1}][Requests per minute {2}].
[S123] Failed to issue a certificate for [upn: {0} role: {1}] [exception: {2}]
[S124] Failed to issue a certificate for [upn: {0} role: {1}] at [certifcate authority: {2}] [exception: {3}]

Agissant en tant que partie de confiance [Service d’authentification fédérée]

[Source de l’événement : Citrix.Authentication.FederatedAuthenticationService]

Ces événements sont journalisés au moment de l’exécution sur le serveur FAS lorsqu’un VDA connecte un utilisateur.

Codes de journal
[S201] Relying party [{0}] does not have access to a password.
[S202] Relying party [{0}] does not have access to a certificate.
[S203] Relying party [{0}] does not have access to the Logon CSP
[S204] Relying party [{0}] accessing the Logon CSP for [upn: {1}] in role: [{2}] [Operation: {3}] as authorized by [{4}]
[S205] Calling account [{0}] is not a relying party in role [{1}]
[S206] Calling account [{0}] is not a relying party
[S208] Private Key operation failed [Operation: {0}][upn: {1} role: {2} certificateDefinition {3}][Error {4} {5}].

Serveur de certificats dans la session [Service d’authentification fédérée]

[Source de l’événement : Citrix.Authentication.FederatedAuthenticationService]

Ces événements sont journalisés sur le serveur FAS lorsqu’un utilisateur utilise un certificat dans la session.

Codes de journal
[S301] Access Denied: User [{0}] does not have access to a Virtual Smart Card
[S302] User [{0}] requested unknown Virtual Smart Card [thumbprint: {1}]
[S303] Access Denied: User [{0}] does not match Virtual Smart Card [upn: {1}]
[S304] User [{0}] running program [{1}] on computer [{2}] using Virtual Smart Card [upn: {3} role: {4} thumbprint: {5}] for private key operation [{6}]
[S305] Private Key operation failed [Operation: {0}][upn: {1} role: {2} containerName {3}][Error {4} {5}].

FAS assertion plugin [Service d’authentification fédérée]

[Source de l’événement : Citrix.Authentication.FederatedAuthenticationService]

Ces événements sont enregistrés par le plug-in d’assertion FAS.

Codes de journal
[S500] No FAS assertion plugin is configured
[S501] The configured FAS assertion plugin could not be loaded [exception:{0}]
[S502] FAS assertion plugin loaded [pluginId={0}] [assembly={1}] [location={2}]
[S503] Server [{0}] failed to assert UPN [{1}] (logon evidence was supplied but the plugin [{2}] does not support it)
[S504] Server [{0}] failed to assert UPN [{1}] (logon evidence was supplied but there is no configured FAS plugin)
[S505] Server [{0}] failed to assert UPN [{1}] (the plugin [{2}] rejected the logon evidence with status [{3}] and message [{4}])
[S506] The plugin [{0}] accepted logon evidence from server [{1}] for UPN [{2}] with message [{3}]
[S507] Server [{0}] failed to assert UPN [{1}] (the plugin [{2}] threw exception [{3}])
[S507] Server [{0}] failed to assert UPN [{1}] (the plugin [{2}] threw exception [{3}])
[S508] Server [{0}] failed to assert UPN [{1}] (access disposition was supplied but the plugin [{2}] does not support it)
[S509] Server [{0}] failed to assert UPN [{1}] (access disposition was supplied but there is no configured FAS plugin)
[S510] Server [{0}] failed to assert UPN [{1}] (the access disposition was deemed invalid by plugin [{2}]

FAS compatible avec Workspace [Service d’authentification fédérée]

[Source de l’événement : Citrix.Fas.Cloud]

Ces événements sont consignés lorsque FAS est utilisé conjointement avec Workspace.

Codes de journal
[S001] Rotating Citrix Cloud service keys [fas id={0}]
[S002] The FAS cloud service is starting. FasHub cloud service URL: {0}
[S003] FAS registered with the cloud [fas id: {0}] [transaction id: {1}]
[S004] FAS failed to register with the cloud [fas id: {0}] [transaction id: {1}] [exception: {2}]
[S005] FAS sent its current configuration to the cloud [fas id: {0}] [transaction id: {1}]
[S006] FAS failed to send its current configuration to the cloud [fas id: {0}] [transaction id: {1}] [exception: {2}]
[S007] FAS unregisted from the cloud [fas id: {0}] [transaction id: {1}]
[S009] FAS failed to unregister from the cloud [fas id: {0}] [transaction id: {1}] [exception: {2}]
[S010] The FAS service is connected to the cloud messaging URL: {0}
[S011] The FAS service is not connected to the cloud
[S012] The FAS service is available for single-sign on from Citrix Cloud
[S013] The FAS service is not available for single-sign on from Citrix Cloud. [{0}] Further details can be found in the admin console
[S014] A call to the cloud service <service name> failed [fas id: {0}] [transaction id: {1}] [exception: {2}]
[S015] A message from Citrix Cloud was blocked because the caller is not permitted [message ID {0}] [transaction ID {1}] [caller {2}]
[S016] A call to the cloud service <service name> succeeded [fas id: {0}] [transaction id: {1}]
[S019] FAS downloaded its configuration from the cloud [fas id: {0}] [transaction id: {1}]
[S020] FAS failed to download its configuration from the cloud [fas id: {0}] [transaction id: {1}] [exception: {2}]
[S021] The FAS cloud service failed to start. Exception: {0}
[S022] The FAS cloud service is stopping

Ouverture de session [VDA]

[Source de l’événement : Citrix.Authentication.IdentityAssertion]

Ces événements sont journalisés sur le VDA durant la phase d’ouverture de session.

Codes de journal
[S101] Identity Assertion Logon failed. Unrecognised Federated Authentication Service [id: {0}]
[S102] Identity Assertion Logon failed. Could not lookup SID for {0} [Exception: {1}{2}]
[S103] Identity Assertion Logon failed. User {0} has SID {1}, expected SID {2}
[S104] Identity Assertion Logon failed. Failed to connect to Federated Authentication Service: {0} [Error: {1} {2}]
[S105] Identity Assertion Logon. Logging in [Username: {0}][Domain: {1}]
[S106] Identity Assertion Logon. Logging in [Certificate: {0}]
[S107] Identity Assertion Logon failed. [Exception: {0}{1}]
[S108] Identity Assertion Subsystem. ACCESS_DENIED [Caller: {0}]

Certificats dans la session [VDA]

[Source de l’événement : Citrix.Authentication.IdentityAssertion]

Ces événements sont journalisés sur le VDA lorsqu’un utilisateur tente d’utiliser un certificat dans la session.

Codes de journal
[S201] Virtual smart card access authorized by [{0}] for [PID: {1} Program Name: {2}][Certificate thumbprint: {3}]
[S203] Virtual Smart Card Subsystem. Access Denied [caller: {0}, session {1}]
[S204] Virtual Smart Card Subsystem. Smart card support disabled

Demande de certificat et génération de paires de clés [Service d’authentification fédérée]

[Source de l’événement : Citrix.Fas.PkiCore]

Ces événements sont journalisés lorsque le serveur FAS effectue des opérations cryptographiques de bas niveau.

Codes de journal
[S001] TrustArea::TrustArea: Installed certificate [TrustArea: {0}] [Certificate {1}][TrustAreaJoinParameters{2}
[S014] Pkcs10Request::Create: Created PKCS10 request [Distinguished Name {0}]
[S016] PrivateKey::Create [Identifier {0}][MachineWide: {1}][Provider: {2}][ProviderType: {3}][EllipticCurve: {4}][KeyLength: {5}][isExportable: {6}]
[S017] PrivateKey::Delete [CspName: {0}, Identifier {1}]
Codes de journal
[S104] MicrosoftCertificateAuthority::GetCredentials: Authorized to use {0}
[S105] MicrosoftCertificateAuthority::SubmitCertificateRequest Error submit response [{0}]
[S106] MicrosoftCertificateAuthority::SubmitCertificateRequest Issued certificate [{0}]
[S112] MicrosoftCertificateAuthority::SubmitCertificateRequest - Waiting for approval [CR_DISP_UNDER_SUBMISSION] [Reference: {0}]

Messages d’erreur de l’utilisateur final

Cette section dresse la liste des messages d’erreur courants s’affichant sur la page d’ouverture de session Windows.

Message d’erreur affiché Description et référence
Nom d’utilisateur ou mot de passe non valide L’ordinateur détecte que vous disposez d’un certificat et d’une clé privée valides, mais le contrôleur de domaine Kerberos a rejeté la connexion. Consultez la section Journaux Kerberos de cet article.
Le système n’a pas pu vous connecter. Impossible de vérifier les informations d’identification. / La requête n’est pas prise en charge. Le Controller de domaine ne peut pas être contacté ou le Controller de domaine n’a pas été configuré avec un certificat prenant en charge l’authentification par carte à puce. Inscrivez les certificats de contrôleur de domaine pour « Authentification Kerberos », « Authentification du contrôleur de domaine » ou « Contrôleur de domaine ». Cette réinscription est recommandée, même lorsque le certificat existant semble valide.
Le système n’a pas pu vous connecter. Le certificat de carte à puce utilisé pour l’authentification n’est pas approuvé. Les certificats racine et intermédiaire ne sont pas installés sur l’ordinateur local. Consultez Certificats et infrastructure de clé publique.
Demande incorrecte Ceci indique habituellement que les extensions sur le certificat ne sont pas définies correctement, ou que la clé RSA est trop courte (<2 048 bits).

Informations connexes