Les serveurs IIS de production sont souvent membres d’une ferme de serveurs Web (A la fois des raisons de performance et de fiabilité). Or dans le cadre d’applications ASP.Net il est obligatoire d’uniformiser les MachineKeys des applications sur l’ensemble de ces serveurs (je vous invite à consulter le liens ci-dessous si vous en ignorez la raison). Ce point est parfois oublié lors du passage en production. Je vous propose ici un script qui vous permettra de le faire (via notamment grâce à l’appel à la fonction Push-MachineKey et après avoir configuré correctement au moins un serveur “source” de la manière suivante (et pour toutes les applications concernées) :
-
Décocher les deux cases à cocher sous “Validation Key”
-
Décocher les deux cases à cocher sous “Decryption Key”
-
Cliquer sur “Generate Keys”’
-
Cliquer sur “Apply”
Une fois le serveur “source” correctement configuré, c’est lui qui servira de modèle pour la duplication des MachineKeys. Il suffit de lancer le script ci-dessous (depuis le serveur “source”) après avoir modifié la variable $TargetIISServers pour y mettre la liste des serveurs cibles (ie. les autres serveurs de la ferme Web).
Il existe d’autres fonctions présentes dans le script que je vais sommairement expliquer ci-après :
-
Get-MachineKey : Retourne la liste des MachinesKey locales sous forme de tableau
-
Set-MachineKey : Valorise les MachinesKey locales depuis un tableau passé en argument. Cette fonction supporte les switchs –whatif et –confirm (Risk Mitigation)
-
Push-MachineKey : Pousse les MachineKey locales sur les ordinateurs passées en argument (via du Remoting PowerShell)
-
Show-MachineKey : Affiche (et retourne si –passthru est spécifié) les machines key sur les machines passées en paramètres.
-
Export-MachineKey : Exporte la liste des MachinesKey locales dans le fichier CSV passé en argument
-
Import-MachineKey : Importe localement les MachinesKey depuis le fichier CSV passé en argument
Liens utiles :
-
Generate a Unique Validation Key for Each Application (IIS 7) : http://technet.microsoft.com/en-us/library/cc754909(v=ws.10).aspx
-
machineKey Element (ASP.NET Settings Schema) : http://msdn.microsoft.com/en-us/library/w8h3skw9(v=vs.71).aspx
-
How To: Configure MachineKey in ASP.NET 2.0 : http://msdn.microsoft.com/en-us/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations
-
Generate a Machine Key for a Web Farm (IIS 7) : http://technet.microsoft.com/en-us/library/cc731979(v=WS.10).aspx
IIS production servers are often members of a Web server farm (for performance and reliability reasons). However, in the context of ASP.Net applications, it is mandatory to standardize the MachineKeys of applications on all of these servers (I invite you to consult the links below if you do not know the reason). This point is sometimes forgotten in the production environment. I propose here a script that will allow you to do this (via the call to the Push-MachineKey function and after having correctly configured at least one « source » server in the following way (and for all the applications concerned) :
-
Uncheck the two checkboxes under “Validation Key”
-
Uncheck the two checkboxes under “Decryption Key”
-
Click on “Generate Keys”’
-
Click on “Apply”
Once the « source » server is correctly configured, it will be the template for the duplication of the MachineKeys. Just run the script below (from the « source » server) after modifying the $TargetIISServers variable to set the list of target servers (ie. the other servers in the Web farm).
There are other functions present in the script that I will briefly explain hereafter:
- Get-MachineKey: Returns the list of local MachinesKey as an array
- Set-MachineKey: Sets the local MachinesKey from an array passed as argument. This function supports the -whatif and -confirm (Risk Mitigation)
- Push-MachineKey: Pushes the local MachineKey on the computers passed as argument (via the PowerShell Remoting)
- Show-MachineKey: Displays (and returns if -passthru is specified) the MachineKey on the computers passed as argument.
- Export-MachineKey: Exports the list of the local MachinesKey in the CSV file passed as argument
- Import-MachineKey: Locally imports the MachinesKey from the CSV file passed as argument
Useful links:
-
Generate a Unique Validation Key for Each Application (IIS 7) : http://technet.microsoft.com/en-us/library/cc754909(v=ws.10).aspx
-
machineKey Element (ASP.NET Settings Schema) : http://msdn.microsoft.com/en-us/library/w8h3skw9(v=vs.71).aspx
-
How To: Configure MachineKey in ASP.NET 2.0 : http://msdn.microsoft.com/en-us/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations
-
Generate a Machine Key for a Web Farm (IIS 7) : http://technet.microsoft.com/en-us/library/cc731979(v=WS.10).aspx
Laurent