Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

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 Smile ) 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 Stick out tongue


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 :
Publié lundi 14 avril 2008 16:24 par sanzio
Classé sous : , ,

Commentaires

lundi 14 avril 2008 17:25 by cyril

# re: Crypter une section du fichier de configuration avec aspnet_regiis

lundi 14 avril 2008 17:31 by sanzio

# re: Crypter une section du fichier de configuration avec aspnet_regiis

Désolé Cyril, j'avais pas vu,

ben maintenant, il y a une couche de plus... :)

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [WF4] Passage d’arguments Literal, VisualBasicValue ou LambdaValue? par Blog de Jérémy Jeanson le il y a 7 heures et 50 minutes

- [RIA Services] Include et DomainDataSource par Blog Technique d'Audrey PETIT le il y a 19 heures et 14 minutes

- ZUNE : Version ZUNE Software V 4.2 et la socialisation par Blog Technique de Romelard Fabrice le il y a 20 heures et 39 minutes

- Pratique de Silverlight par Eric Ambrosi par Blog de Frédéric Queudret le il y a 22 heures et 46 minutes

- Apprendre à développer pour les mobiles avec la nouvelle génération .NET par Perspective le 03-21-2010, 16:37

- ZUNE : Nouvelle version du ZUNE Software – V 4.2 par Blog Technique de Romelard Fabrice le 03-21-2010, 16:11

- Nouveau système d'aide pour Visual Studio 2010 : pour ceux qui n'apprécient pas trop l'absence d'index... par CoqBlog le 03-20-2010, 20:05

- L'interface naturelle de Windows Phone 7 Series par Perspective le 03-20-2010, 18:49

- Comment mapper une vue SQL sur une collection de complex type? par Matthieu MEZIL le 03-19-2010, 21:05

- SQL Server : Query Notification ou comment être notifié de modifications de données côté application (SqlDependency) par SQL Server vu par Christian Robert le 03-19-2010, 15:06