Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

PKI : OCSP et bug de certutil

Commençons par quelques rappels : dans le cadre d’un déploiement d’une PKI (public key infrastructure, autrement dit le système permettant l’émission de certificats en entreprise), il est nécessaire d’inclure un ou plusieurs mécanismes de vérification de la révocation des certificats.

Le plus fréquemment utilisé s’appelle la CRL, ou certificate revocation list : il s’agit simplement d’une sorte de fichier texte contenant la liste des certificats révoqués par une autorité donnée, accessible via une classique adresse http. Bien qu’il existe des mécanismes de mise en cache, l’accès à cette liste de révocation peut s’avérer problématique lorsqu’elle commence à devenir volumineuse ou lorsqu’elle est accédée très souvent par de nombreux autres systèmes.

Un autre mécanisme nommé OCSP (online certificate status protocol) permet de pallier à ces limitations : au lieu de télécharger la liste intégrale des certificats révoqués à chaque vérification, il devient possible d’interroger ce service pour lui demander si le certificat n°XXXXX provenant de l’autorité Y est révoqué ou non.

C’est ce second mécanisme qui nous intéresse aujourd’hui, et plus précisément un bug assez surprenant que j’ai rencontré au cours d’un déploiement récent chez un client.

Lors d’un test de la chaine de validation des certificats à l’aide de la commande certutil -urlfetch -verify testcertificat.cer (très utile pour identifier à quel niveau un certificat est refusé, plus d’informations ici par exemple : https://www.sevecek.com/EnglishPages/Lists/Posts/Post.aspx?ID=13 ), je me suis retrouvé avec une exécution incomplète et en boucle des différents tests :

clip_image002

Suivie au bout de quelques secondes par un plantage pur et simple de certutil :

clip_image004

Quelques vérifications rapides me permirent de constater que lorsque le serveur OCSP était rendu indisponible, certutil retrouvait un fonctionnement normal (et indiquait bien sûr l’indisponibilité de l’OCSP) mais impossible d’aller plus loin dans la résolution, et Internet semblait pour une fois muet sur ce souci.

C’est finalement grâce à un collègue qui avait déjà rencontré ce cas que la solution a été trouvée : il s’avère le certificat OCSP Signing doit être émis par l’autorité pour laquelle le serveur OCSP réalise la vérification de révocation, autrement certutil présente ce comportement ; alors que dans ce déploiement c’est l’autorité émettrice qui avait été utilisée pour émettre les certificats OCSP Signing pour la vérification de l’autorité émettrice mais aussi de l’autorité racine (standalone et hors ligne).

La résolution du problème s’impose alors d’elle-même : il faut générer le certificat OCSP Signing sur chacune des autorités dont la vérification sera assurée par le répondeur OCSP, y compris lorsqu’il s’agit d’autorités standalone.

La procédure dans ce cas précis est détaillée sur ce blog : https://blogs.technet.microsoft.com/askds/2009/06/30/implementing-an-ocsp-responder-part-iv-configuring-ocsp-for-use-with-standalone-cas/ .
Notez également qu’il est nécessaire d’ajouter l’extension id-pkix-ocsp-nocheck au préalable (à l’aide de la commande certutil -v -setreg policy\EnableRequestExtensionList +1.3.6.1.5.5.7.48.1.5), car elle n’est par défaut pas disponible sur les autorités standalone.

Enfin, on regrettera que les informations disponibles à ce sujet sur les ressources officielles soient contradictoires, puisqu’on retrouve sur technet les deux passages suivants :

Windows Vista SP1 and Windows Server 2008 enable the OCSP signing certificate implemented by the OCSP responder to use a certificate that terminates in a different root CA than the CA whose revocation information is reported in the OCSP responses. This feature enables an organization with a diverse PKI to limit sources of revocation information and the CAs that can issue OCSP signing certificates.
(https://technet.microsoft.com/en-us/library/ee619736(v=ws.10).aspx au chapitre Independent OCSP signing certificate)

Online Certificate Status Protocol (OCSP) Response Signing certificates need to be signed by the same certification authority (CA) key that was used to sign the end-entity certificates that they provide status for.
( https://technet.microsoft.com/en-us/library/cc754774(v=ws.11).aspx )

Powershell : Limite de requête Active Directory via ADWS

Problème

Lors de l’utilisation d’un script qui génère plusieurs requêtes depuis plusieurs serveurs en simultané afin d’alimenter une banque de données, je me suis heurté au message d’erreur suivant :

>get-adcomputer : A connection to the directory on which to process the request was unavailable. This is likely a 
transient condition.
At C:\temp\Fusion.ps1:97 char:1
+ get-adcomputer -Filter {DNSHostName -eq $FullName} -Properties OperatingSystem | Select-Object -Property N ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-ADComputer], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

Explication

Cette erreur est liée aux valeurs par défaut du service « Active Directory Web Services » définies dans le fichier de configuration sur les DC sous : 

>C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe.config

En effet si vous éditez le fichier de configuration vous pourrez voir que par défaut le maximum de connexions LDAP par utilisateur est de 5.

<pre class="wp-block-syntaxhighlighter-code"><add key="MaxConnectionsPerUser" value="5" /></pre>

Ce qui signifie que je ne peux exécuter plus de 5 connexions en simultanée via Active Directory Web Services avec les même identifiants.

Il est possible de modifier cette valeur, mais cette action n’est pas recommandée car elle peut avoir un impact sur les performances de l’AD.

Si toutefois vous souhaitez la modifier, certaines précautions sont à prendre; il est clairement précisé dans le fichier de configuration que la valeur de « MaxConnectionsPerUser » ne peut pas être plus grande que la valeur de « MaxPoolConnections », il faudra donc aussi prendre en compte la valeur suivante :

>

Cette dernière spécifie que le nombre maximal de connexions LDAP, pour chaque instance de service d’annuaire prise en charge par le service ADWS s’exécutant sur un serveur.

Il peut être aussi intéressant de regarder la valeur de la clé ci-dessous : 

>

Celle-ci permet, de spécifier le pourcentage maximal de connexions LDAP pouvant être utilisées pour effectuer des requêtes pour chaque instance de service d’annuaire prise en charge par le service ADWS sur un serveur.

 

Attention :

Même s’il est possible de modifier les paramètres ci-dessus, Microsoft ne le préconise pas (cf: note ci-dessous) :

>Plusieurs paramètres de configuration du service ADWS affectent la limitation de la bande passante sur un serveur Windows Server 2008 R2 sur lequel le service ADWS est en cours d'exécution.
Nous recommandons aux administrateurs de modifier les valeurs par défaut des seuls paramètres suivants:
MaxConcurrentCalls, MaxConcurrentSessions, MaxReceivedMessageSize et MaxStringContentLength.

 

Compléments d’informations:

https://technet.microsoft.com/en-us/library/373e68b3-abfc-4da4-ae89-72a15cfc7543

Stratégies de groupe : Activation du fichier gpsvc.log (Partie 1/3)

Bonjour à tous !

Aujourd’hui nous allons aborder la résolution de problèmes d’application des stratégies de groupe (coté poste client) et plus précisément la partie avancée de cette résolution.

Débug usuel

Habituellement, il faut passer par l’Observateur d’Evènements du poste client afin d’obtenir plus de détails sur l’application des stratégies de groupe.

Deux sections peuvent vous intéresser :

  • Journaux Windows/Système
    • Le niveau de détail est assez limité mais c’est un bon point de départ
    • Vous pouvez filtrer les événements par les sources pour ne garder que les parties intéressantes

  • Journaux des applications et des services/Microsoft/Windows/GroupPolicy
    • Est beaucoup plus détaillé
    • Ne contient que les evènements stratégies de groupe

Mais parfois, il peut s’avérer que les informations remontées par ces logs ne soient pas assez précises pour trouver la vraie cause du problème.

Débug avancé

Les messages d’état détaillés

Une première étape concerne l’activation des Messages d’état détaillés sur le poste client.
Ces messages détaillés vont afficher le détail des étapes de démarrage ou d’arrêt d’un poste.
On retrouvera dans ces messages le déroulement de l’application des GPO à l’ouverture d’une session utilisateur.
Ce n’est pas forcément très verbeux mais cette option est utile pour voir sur quelle section l’application des GPO bloque ou prend du temps.
L’activation de ce paramètre se fait par GPO ou GPEdit :

Le fichier gpsvc.log

Une deuxième étape concerne l’activation du fichier gpsvc.log.
Ce fichier va contenir toutes les étapes et tous les détails de l’application des GPO sur un poste, du démarrage du poste au bureau de l’utilisateur.
C’est aussi le cas lors d’un rafraîchissement manuel des GPOs par un GPUpdate.
 
Voici la procédure pour activer ce log :
  1. Ouvrez l’éditeur de registre avec la commande Regedit
  2. Dépliez la clé HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion
  3. Crééz une nouvelle clé Diagnostics si elle n’existe pas
  4. Crééz une nouvelle valeur DWORD (32-bit) GPSvcDebugLevel
  5. Modifiez la valeur GPSvcDebugLevel par la valeur 30002 (Hexadecimal)
  6. Fermez le Registre
  7. Crééz le dossier Usermode si celui-ci est absent du dossier C:\Windows\Debug\
  8. Lancez la commande Gpupdate /force
  9. Le fichier gpsvc.log doit se créer

Astuce : Une fois le fichier activé, sur Windows 7/Windows 2008 R2 ou en-dessous, il peut arriver que plusieurs threads concurrents écrivent en même temps dans le fichier, occasionnant des pertes d’informations.
Dans ce cas, il est recommandé de séparer le rafraîchissement des paramètres ordinateurs et utilisateurs avec la commande Gpupdate /force /target:computer ou Gpupdate /force /target:user
 
Une fois le fichier créé, il faut maintenant l’analyser. Ce sera l’objet d’une deuxième partie.