IIS : Erreur lors de la déclaration de l'identité d'un pool d'application

iisSur un serveur qui fonctionnait parfaitement (c’est à dire que IIS tourne et les sites répondent), je crée un nouveau pool d’application avec un compte d’annuaire comme identité. Et là boom, erreur de type « Données incorrectes » (HRESULT : 0x80090005) :
iis_bad_data
Ou plus sexy en Powershell :
iis_bad_data_ps
Dans un premier temps, on pourrait croire que le mot de passe du compte est erroné. Mais ce n’est pas le cas. Quand cette erreur survient, le serveur a déjà vérifié la validité du compte.
Comment IIS encrypte les mots de passe ?
IIS encrypte les mots de passe en utilisant différents providers qui sont stockées dans le fichier applicationHost.config (%SystemRoot%System32inetsrvconfig), dans la section <configProtectedData>, par exemple :

<add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="*****" />

Le provider « AesProvider » est utilisé pour crypter et décrypter les sections system.webServer.
Le provider « IISWASOnlyRsaProvider » est utilisé pour crypter et décrypter les sections dans le applicationHost.config.
Quant aux clés d’encryption, elles sont dans C:ProgramDataMicrosoftCryptoRSAMachineKeys, et elles sont uniques à chaque serveur !
Conclusion : Cette erreur viendrait du fait que les providers décrits dans applicationHost.config ne correspondent plus aux clés du serveur.
Que s’est-il passé ?
Il y a évidemment plusieurs scénarii qui aboutissent à ce problème, mais le plus simple est le suivant : le fichier applicationHost.config a été écrasé à partir d’une copie d’un autre serveur.
Comment résoudre ?
Il y a plusieurs solutions aussi, plus ou moins douloureuses :
Restaurer le fichier applicationHost.config s’il a été sauvegardé,
Réinstaller le rôle « Serveur web »,
Importer également les clés du serveur d’origine. Cet article explique bien le problème et la manipulation à faire.
Un autre article intéressant explique tout cela en détail : MachineKeys on IIS 7.x : Inside Out.