CredSSP qu'est ce que c'est ?
CredSSP : Credential Security Service Provider.
A quoi cela sert-il ?
A déléguer des identifiants pour une session distante, plus précisément, CredSSP vous permet de fournir une authentification de bout en bout au travers de plusieurs sessions distantes.
Exemple :
Depuis un Serveur A un script Powershell ouvre une session distante sur un Serveur B, ce dernier traite ses instructions puis ouvre une session distante pour requêter un Serveur C et y déposer ses résultats sur un partage.
Lors de l'ouverture de la session distante entre A et B Windows utilise les identifiants fournis, mais lors de l'ouverture de la session distante depuis B vers C, Windows considère qu'il s'agit d'une usurpation Kerberos (car par défaut WinRm n'autorise pas la délégation des identifiants).
Afin de palier cela que ce soit pour un "Invoke-Command" ou un "New-PSSession" vous devrez ajouter "-Authentication CredSSP"; cet ajout vous permettra de déléguer les identifiants pour la seconde session distante.
Mise en oeuvre :
Et non, on ne peut pas utiliser l'option CredSSP sans prérequis, voici ceux à mettre en place.
Sur le Serveur A on va activer CredSSP "Client" via la commande suivante :
Enable-WSManCredSSP -Role Client -DelegateComputer ServerB.mondomaine.com -Force
On peut vérifier que cela à bien fonctionné à l'aide de la commande suivante :
Get-WSManCredSSP
Puis sur le Server B on va activer CredSSP "Server" via la commande suivante :
Enable-WSManCredSSP -Role Server -Force
vérifions.
Et voilà nous devrions donc pouvoir exécuter la commande initiale depuis le serveur A, vérifions cela sans oublier d'ajouter "-Authentication CredSSP".
Enter-PSSession -ComputerName lab01-wsus1.LAB.ORG -Credential Lab\Adminmad -Authentication Credssp
Jusque la tout fonctionne, essayons donc maintenant de requêter vers le serveur C.
Invoke-Command -ComputerName Lab01-wsus2.lab.org -ScriptBlock {Get-WindowsFeature | Where-Object {$_.Name -like "UpdateServices"}}
C'est bien fonctionnel, bien entendu comme ce changement est lié à la sécurité, il est préconisé de désactiver cette option après usage.
On peut utiliser les commandes :
Disable-WSManCredSSP –Role Client # Sur le serveur A
Disable-WSManCredSSP –Role Server # Sur le serveur B
Ou directement depuis le serveur A :
Invoke-Command –ComputerName ServerB –ScriptBlock { Disable-WSManCredSSP –Role Server }
Disable-WSManCredSSP –Role Client
Annexes :
Vous pouvez aussi le faire sur plusieurs Serveurs :
Enable-WSManCredSSP -Role "Client" -DelegateComputer "ServerB.mondomaine.com", "ServerC.mondomaine.com", "ServerD.mondomaine.com" -Force
Ou sur toutes les machines du domaine :
Enable-WSManCredSSP -Role "Client" -DelegateComputer "*.mondomaine.com" -Force
Pour plus d'informations:
https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-6
https://msdn.microsoft.com/en-us/library/windows/desktop/bb931352(v=vs.85).aspx