PI Services

Le blog des collaborateurs de PI Services

Direct Access : Mode single-NIC avec deux cartes réseau

Bien qu’il ne s’agisse pas forcément de la configuration la plus fréquente (ni la plus recommandée) dans un environnement de production, il peut arriver qu’il soit nécessaire de réaliser un déploiement de serveurs DirectAccess en mode « single network adapter behind an edge device », autrement dit avec une seule carte réseau connectée dans une DMZ au lieu du fonctionnement plus classique avec une carte réseau sur le LAN et une autre sur Internet :

clip_image002

(image provenant du whitepaper F5 : https://f5.com/resources/white-papers/f5-and-windows-server-2012-directaccessremote-access-services)

Et il peut également arriver que même dans cette configuration, une seconde carte réseau soit présente sur les serveurs DirectAccess, connectée à un réseau totalement différent (par exemple un réseau d’administration isolé, permettant la prise en main à distance des machines de la DMZ).

Dans ce dernier cas, bien que la configuration soit parfaitement correcte (ce qui n’est déjà pas toujours une mince affaire avec DirectAccess…), les clients ne peuvent pas se connecter et on constate des événements IPSec Main Mode « No Policy Configured ».
Par contre, en désactivant la seconde carte réseau puis en redémarrant, le fonctionnement est rétabli ; et a contrario en réactivant la seconde carte le fonctionnement est maintenu tant qu’aucun redémarrage n’a eu lieu.

Ce phénomène se produit lorsqu’au niveau du firewall Windows, la seconde carte réseau est détectée comme ayant un profil « public » et la raison est la suivante : lors du paramétrage de DirectAccess, les règles du firewall permettant de créer le tunnel IPhttps sont créées uniquement pour le profil de firewall « domain », ce qui est souhaité puisque c’est normalement bien le cas de la carte permettant l’accès aux ressources du LAN.

Or l’interface réseau virtuelle IPhttps s’attache de préférence aux cartes réseau dont le profil est « private » ou « public » lorsqu’elles sont présentes : dans ce cas les règles de firewall deviennent donc inopérantes.

Il y a donc deux solutions possibles : faire en sorte que la seconde carte réseau soit également détectée avec un profil « domain » (ce qui n’est pas toujours réalisable), ou modifier la GPO Direct Access afin qu’elle s’applique à tous les profils :

$gposession = Open-NetGPO –PolicyStore <Name of the server GPO>

Set-NetIPsecRule –DisplayName <Name of the IPsec policy> –GPOSession $gposession –Profile Any

Save-NetGPO –GPOSession $gposession

On notera que pour une fois, ce contournement est bien détaillé sur Technet (https://technet.microsoft.com/en-us/library/jj134204.aspx )… mais sur une page où il a bien peu de chances d’être trouvé, puisqu’elle concerne un stade de la configuration de Direct Access ou la GPO n’existe pas et où il n’y a donc aucune raison d’envisager d’y apporter des modifications !

Enfin, attention : il est fort probable qu’il faille réappliquer le contournement à chaque fois que la configuration DirectAccess est modifiée en utilisant l’assistant, puisque ce dernier met à jour la GPO.

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 )