Crypter une section du fichier de configuration avec aspnet_regiis
Bonjour,
Je me suis retrouvé dans cette problématique lors d'un projet en entreprise, au fur et à mesure de mes recherches j'ai trouvé des posts de blog en anglais, mais aussi les pages MSDN dont je me suis inspiré et que je référencerais plus bas.
En effet, je devais crypter plusieurs section du fichier de configuration, et donc j'étais un peu embeter, j'ai exploré plusieurs piste, et celle-ci est à mon gout la moins intrusive pour le développeur que je suis.
Avec l’outil aspnet_regiis qu’on trouve dans
%windows%\Microsoft.Net\Framework\versionNumber, on
peut crypter des sections du fichier de configuration, en autre la section "ConnectionStrings".
On va donc voir ensemble comment crypter
cette section du fichier de configuration.
La
première étape est de préparer la machine :
-
Créer un
conteneur de clé RSA au niveau de la machine :
Aspnet_regiis –pc "MyContainer" -exp
( le dernier argument "exp" permet d’être sûr que le conteneur, avec les clés, sera exportable )
- Donner les droits
d’accès au conteneur aux différents utilisateurs ASPNET necessaire pour l’application
web :
Aspnet_regiis –pa "MyContainer"
"MonCompte"
( dans mon cas, j’avais besoin de donner le
droit d’accès à deux comptes utilisateurs, celui utiliser lors de l’accès
anonyme à mon application, et le deuxième quand l’utilisateur est authentifié )
La
deuxième étape est de préparer le fichier de configuration :
Pour cela, il suffit de rajouter
une section "configProtectedData" dans la section "configuration".
Ci-dessous un exemple corrigé ( il manquait une virgule
) issue de la page msdn :
<configProtectedData>
<providers>
<add
name="SampleProvider"
type="System.Configuration.RsaProtectedConfigurationProvider,
System.Configuration,
Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
processorArchitecture=MSIL"
keyContainerName="MyContainer"
useMachineContainer="true" />
</providers>
</configProtectedData>
Cette section n’est pas nécessaire dans le cas ou on utilise
le conteneur par defaut,mais comme ici, j’ai créé mon propre conteneur, je dois la
mettre.
La troisième et
dernière étape est de crypter la section :
Pour cela, on utilise à nouveau l’outil aspnet_regiis, qui
nous est finalement bien utile.
La commande est simple :
Aspnet_regiis -pe "connectionStrings" -app "/" -site "NomOuIdDuSite" -prov "SampleProvider"
Explication sur les arguments :
·
-app "/" : il s’agit de l’application dont nous allons crypter
le mot de passé.
·
-site "NomOuIdDuSite" : il s’agit du nom ou de l’Id
du site correspondant, cet argument est facultatif, mais à ce moment là, il va
prendre sa valeur par défaut ( pour le site par défaut ).
·
-prov "SampleProvider" : nom du provider que l’on a
spécifié dans le fichier de configuration, et donc celui utiliser pour le cryptage.
Et voila, maintenant, si vous voulez aller voir votre section de fichier de configuration, vous trouverez cela :
<connectionStrings configProtectionProvider="SampleProvider">
<EncryptedData
Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo
xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData> <CipherValue>VfPYiiXNiRmQkLB8vrr/0Lj5Idp6xypm3CEtL6Xk/BCRDqD4EQR2CejBItfhNVARgxpe+Pt+2+qq4H3LsP6kVsL</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData> <CipherValue>M7IZqtybdSo4siPvBqa3lyjOkHs200LUW6OkBkZrXnSjPJ1B+jKeS11NTnPtSvQMwh0Hs7SbMNuChocvgHi7d0p/</CipherValue>
</CipherData>
</EncryptedData>
Evidemment, j'ai tronqué les CipherValue 
Source MSDN : Encrypting And Decrypting Configuration Sections
Imporing And Exporting Protected Configuration RSA Key Containers
ASP.NET IIS Registration Tool (Aspnet_regiis.exe)
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :