GĂ©rer le renouvellement du certificat ADFS "Token-Signing"

Formation Libérez tout le potentiel de Microsoft ADFS

Tutorial Thumbnail

Par dĂ©faut, ADFS est configurĂ© pour gĂ©nĂ©rer des certificats de jeton auto-signĂ©s d’une durĂ©e d’un an. Cette durĂ©e peut ĂȘtre modifiĂ©e, plus de 3 ans de validitĂ© pour des raisons de sĂ©curitĂ©. En revanche, si des administrateurs n'ont pas prĂ©vu le fait de renouveler chaque annĂ©e ce fameux certificat, le service ADFS ne pourra plus du tout dĂ©marrer, donc toute authentification SSO configurĂ©es sur d'autres serveurs ne pourront forcĂ©ment plus se connecter !


Cas d'expiration du certificat

Si comme moi, vous avez totalement oubliĂ© le fait de renouveler ce certificat et que vous vous en ĂȘtes aperçu au moment de vous authentifier sur une application de votre SI, vous avez dĂ» voir le message suivant :

System.ArgumentNullException: La valeur ne peut pas ĂȘtre null.


Nous pouvons avoir plus de détails dans l'Observateur d'événements Windows :




Nous avons en évidence un détail qui nous intrigue en paramÚtre : la mention "certificate". C'est tout de suite là que j'ai compris
 En tentant de lancer ou de démarrer un élément dépendant du service ADFS, impossible de faire quoi que ce soit !




Avant toute chose, vous devez d’abord comprendre la nĂ©cessitĂ© du certificat ADFS. En thĂ©orie, ADFS gĂ©nĂšre deux certificats comme suit :

  • Signature de jeton ADFS
  • DĂ©chiffrement du jeton ADFS


Quel est le rĂŽle de ce certificat ?

Un certificat de signature de jeton (Token-Signing) est un certificat X509. Les serveurs de fĂ©dĂ©ration utilisent des paires de clĂ©s publique / privĂ©e associĂ©es pour signer numĂ©riquement tous les jetons de sĂ©curitĂ© qu’ils produisent. Cela inclut la signature des demandes de rĂ©solution de mĂ©tadonnĂ©es et d’artefacts de fĂ©dĂ©ration publiĂ©es.


Il est possible de configurer plusieurs certificats "Token-Signing" dans le composant logiciel enfichable Gestion AD FS afin de faciliter le renouvellement des certificats avant leur expiration. Par défaut, bien que tous les certificats soient publiés, seul le certificat principal de signature de jetons est utilisé par AD FS pour la signature effective des jetons. Chaque certificat sélectionné doit posséder une clé privée associée.


Un certificat de déchiffrement de jeton est utilisé pour déchiffrer les jetons reçus par ce serveur de fédération.


Il est possible de possĂ©der plusieurs certificats de dĂ©chiffrement. Cela autorise un serveur de fĂ©dĂ©ration de ressources Ă  dĂ©chiffrer des jetons Ă©mis avec un certificat antĂ©rieur, mĂȘme aprĂšs l'instauration d'un nouveau certificat en tant que principal certificat de dĂ©chiffrement. Bien que tous les certificats soient utilisables pour le dĂ©chiffrement, seul le certificat principal de dĂ©chiffrement de jetons est effectivement publiĂ© dans les mĂ©tadonnĂ©es de la fĂ©dĂ©ration. Chaque certificat sĂ©lectionnĂ© doit possĂ©der une clĂ© privĂ©e associĂ©e.


C'est pour cela que ces deux certificats sont primordiaux : assurer l'authenticité de chaque authentification entrantes et sortantes du serveur !


Périodes de validité des certificats de jeton

Si le serveur ADFS est configuré pour renouveler automatiquement les certificats de signature et de déchiffrement de jeton (AutoCertificateRollover est défini sur TRUE), vous pouvez déterminer quand ils seront renouvelés :

  • CertificateGenerationThreshold dĂ©crit le nombre de jours avant la date de fin du certificat pour qu’un nouveau certificat soit gĂ©nĂ©rĂ©.
  • CertificatePromotionThreshold dĂ©termine le nombre de jours aprĂšs la gĂ©nĂ©ration du nouveau certificat pendant lequel il sera promu en tant que certificat principal (en d’autres termes, AD FS commencera Ă  l’utiliser pour signer les jetons qu’il Ă©met et dĂ©chiffrer les jetons des fournisseurs d’identitĂ©).


Comment dĂ©marrer tout de mĂȘme le service ADFS ?

Au fait que mon certificat soit expiré et qu'il n'est pas possible de démarrer le service, une simple manipulation est possible afin de permettre de redémarrer le service. Il s'agit de modifier l'heure de la machine et de démarrer ensuite le service. En prenant une date antérieur à la date d'expiration du certificat 'Token-Signing', nous n'allons plus avoir la vérification de l'expiration du certificat.


Pour cela, rendez-vous dans la paramĂštres Windows et choisissez une date Ă  un mois de l'expiration du certificat.



Validez la modification et dans une console PowerShell, exécutez la commande suivante :

[PS] C:\> Start-Service adfssrv


Et par magie, cela fonctionne !



Nous distinguons aucune erreur, seul des avertissements qui nous indique le dĂ©marrage du service en cours 😉


VĂ©rification des certificats

Exécutez la commande PowerShell suivante sur le serveur ADFS principal pour afficher les propriétés relatives aux certificats :

[PS] C:\> Get-AdfsProperties | FL AutoCert*, Certificat*



Deux modes de renouvellements sont disponibles :

  • Mode automatique (Automatic Staged Rollover) : C'est au cours de ce processus que l'ADFS contrĂŽle le moment oĂč les nouveaux certificats de jetons auto-signĂ©s sont gĂ©nĂ©rĂ©s et oĂč ils sont promus au rang de certificats "primaires".
  • En mode manuel (Manual Staged Rollover) : Ce processus contrĂŽle manuellement le moment oĂč les nouveaux certificats de jetons auto-signĂ©s sont gĂ©nĂ©rĂ©s et le moment oĂč ils sont promus au rang de certificats "primaires". C'est donc Ă  l'administrateur de rĂ©aliser le renouvellement des certificats lui mĂȘme.

On affiche le certificat "Token-Signing" :

[PS] C:\> Get-AdfsCertificate CertificateType Token-Signing




Renouveler les certificats

Générez les nouveaux certificats de jeton en tant que certificats "secondaires", utilisez les commandes PowerShell ci-dessous. Les certificats « primaires » actuels et les nouveaux certificats "secondaires" seront disponibles pour les applications de la partie de confiance.


Nous pouvons modifier la date de validité du certificat. Cela se définis en fonction du nombre de jours qui deviendront la période de validité des nouveaux certificats de jeton auto-signés :

  • 1 annĂ©e : 365
  • 3 ans : 1095
  • 5 ans : 1827

Dans notre exemple, nous allons utilisons 5 ans (1827 jours), bien que pour des raisons de sécurité, la durée de renouvellement du certificat doit se faire chaque année.

Définir la durée de validité de notre certificat (exemple : durée de 5 ans = 1827 jours) :

[PS] C:\> Set-ADFSProperties -CertificateDuration 1827


Notez que vous ne pouvez pas générer manuellement les nouveaux certificats de jeton lorsque le processus de substitution automatique ADFS est désactivé. Par conséquent, les commandes activent le processus, génÚrent les nouveaux certificats en tant que "Secondaire", puis désactivent le processus :

[PS] C:\> Set-ADFSProperties -AutoCertificateRollover $true
[PS] C:\> Update-AdfsCertificate -CertificateType Token-Decrypting
[PS] C:\> Update-AdfsCertificate -CertificateType Token-Signing
[PS] C:\> Set-ADFSProperties -AutoCertificateRollover $false


Nous redémarrons le service ADFS :

[PS] C:\> Restart-Service adfssrv



Exportation du nouveau certificat

De nombreuses applications sont configurĂ©es en s’appuyant sur l’authentification unique de confiance de partie, ce qui nĂ©cessite l’exportation du certificat et son partage avec le propriĂ©taire de l’application nĂ©cessaire pour importer le certificat afin d’avoir un accĂšs transparent Ă  l’application.


Récupération de l'empreinte du certificat

Récupérer l'empreinte avec PowerShell

[PS] C:\> Get-ADFSCertificate Token-Signing | Select-Object Thumbprint



Il s'agit ici de récupérer le certificat de signature des jetons ADFS et non le certificat de l'interface Web du portail ADFS !


Récupérer l'empreinte depuis la console ADFS

Depuis la console ADFS, récupérez le certificat de signature dans le dossier Certificat > Signature de jetons. Double cliquer sur le certificat, puis l'onglet Détails > Empreinte numérique.




Il sera nécessaire d'importer la clé publique du certificat (.crt) sur le serveur.

Exploration de la clé publique en Base64

De nombreuses applications sont configurées sous la forme d'un SSO reposant sur la confiance d'une partie, ce qui nécessite l'exportation d'un certificat et son partage avec le propriétaire de l'application nécessaire pour importer le certificat afin d'avoir un accÚs transparent à l'application.


Afin d'exporter le certificat, ouvrez la console de gestion ADFS : ADFS > Service > Certificats. Pour chaque certificat "Token", effectuez les opérations suivantes.

Cliquez avec le bouton droit de la souris sur le certificat > Afficher le certificat... :




Dans la nouvelle fenĂȘtre > DĂ©tails (onglet) > Copier dans le fichier (bouton) > Suivant :




SĂ©lectionnez : DER encoded binary X.509 (.cer) -ou- Base-64 Encoded X.509 (.cer) :




Suivant > Rechercher un emplacement pour enregistrer le fichier et lui donner un nom :



Cliquer sur "Suivant", puis "Terminer". Le certificat a été exporté dans le dossier qui a été choisi.


Remarque : Pour exporter le certificat au format .PEM, choisissez Base-64 Encoded X.509 (.CER), puis renommez le fichier enregistré avec l'extension .pem.


Le fichier sera exporté en Base64 et est consultable dans un Bloc Note :




Mettre Ă  jour les nouveaux certificats

Avant que les anciens certificats n’expirent, vous devez promouvoir les nouveaux certificats en "Principal".

Depuis la console de gestion ADFS , allez dans la partie ADFS > Service > Certificats. Pour chaque certificat de jeton "Secondaire", procédez comme suit :


Cliquez avec le bouton droit de la souris sur le certificat > DĂ©finir en tant que certificat principal :



Dans la colonne des certificats portant le statut "Principal" doit figurer sur celui qui a été définit ainsi.


Effacer les anciens certificats

Une fois que les anciens certificats ont expirĂ©, vous pouvez les supprimer de la console de gestion ADFS. Notez que vous n’avez que la possibilitĂ© de supprimer les certificats « secondaires ». Vous ne pouvez pas supprimer un certificat "principal" car il dĂ©pend de la configuration ADFS.


Rendez-vous dans la console de gestion ADFS, puis déroulez le menu "ADFS > Service > Certificats". Pour chaque certificat de jeton "Secondaire", cliquez avec le bouton droit de la souris sur le certificat, puis "Supprimer".


Niveau Avancé

Prérequis :

Proposer une modification
Antoine
Par Antoine
Rédigé le Mercredi 24 Avril 2024