Cette documentation est archivée et n’est pas conservée.

Comment : sécuriser des chaînes de connexion lors de l'utilisation de contrôles de source de données

Visual Studio 2005

Lorsque que vous manipulez des contrôles de source de données il est recommandé de centraliser l'emplacement de vos chaînes de connexion en les stockant dans le fichier Web.config de l'application. Cela simplifie la gestion des chaînes de connexion en les rendant disponibles à toutes les pages ASP.NET d'une application Web. Ensuite, vous n'avez pas besoin de modifier des pages individuelles si les informations sur les chaînes de connexion changent. Enfin, vous pouvez améliorer la sécurité des informations sensibles stockées dans une chaîne de connexion, par exemple le nom de la base de données, le nom d'utilisateur, le mot de passe, etc. en chiffrant la section connectionStrings du fichier Web.config avec la configuration protégée.

Cette rubrique explique comment stocker des chaînes de connexion dans la section de configuration connectionStrings du fichier Web.config et comment utiliser l'outil de ligne de commande du .NET Framework pour chiffrer des chaînes de connexion et renforcer ainsi la sécurité.

Pour stocker une chaîne de connexion dans le fichier Web.config

  1. Ouvrez le fichier Web.config de votre application. S'il n'existe pas encore de fichier Web.config, créez un fichier texte nommé Web.config et ajoutez-lui le contenu suivant :

    <?xml version="1.0"?>
    <configuration 
            xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
        <appSettings/>
        <system.web>
        </system.web>
    </configuration>
    
  2. Dans l'élément configuration, créez un nouvel élément nommé connectionStrings, comme illustré dans l'exemple suivant :

    <?xml version="1.0"?>
    <configuration 
            xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
        <connectionStrings>
        </connectionStrings>
        <appSettings/>
        <system.web>
        </system.web>
    </configuration>
    
  3. Dans l'élément connectionStrings, créez un élément add pour chaque chaîne de connexion que vous utiliserez dans votre application Web. Incluez les attributs répertoriés dans le tableau suivant.

    Attribut Description
    1. name

    Nom de cet objet de configuration de chaîne de connexion. Ce nom sera utilisé par les contrôles de source de données et d'autres fonctionnalités pour référencer les informations sur la chaîne de connexion.

    1. connectionString

    Chaîne de connexion à la source de données.

    1. providerName

    Espace de noms du fournisseur de données du .NET Framework à utiliser pour cette connexion, par exemple System.Data.SqlClient, System.Data.OleDb ou System.Data.Odbc.

    Un élément connectionStrings configuré peut ressembler à l'exemple suivant :

    <connectionStrings>
      <add 
        name="NorthwindConnection" 
        connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
    </connectionStrings>
    
  4. Enregistrez et fermez le fichier Web.config.

    Vous pouvez maintenant référencer la chaîne de connexion de votre contrôle de source de données en faisant référence au nom spécifié pour l'attribut name.

  5. Dans l'attribut ConnectionString de votre contrôle de source de données, utilisez la syntaxe d'expression de la chaîne de connexion pour référencer les informations de connexion du fichier Web.config.

    L'exemple suivant illustre un contrôle SqlDataSource dans lequel la chaîne de connexion est lue à partir du fichier Web.config :

    <asp:SqlDataSource ID="ProductsDataSource" Runat="server" 
        SelectCommand="SELECT * from Products"
        ConnectionString="<%$ ConnectionStrings: NorthwindConnection %>"
    </asp:SqlDataSource>
    

Pour chiffrer les informations de chaîne de connexion stockées dans le fichier Web.config

  1. Dans la ligne de commande Windows, exécutez l'outil ASP.NET IIS Registration (aspnet_regiis.exe) avec les options suivantes :

    • option -pe, en lui passant la chaîne "connectionStrings" pour chiffrer l'élément connectionStrings ;

    • option -app, en lui passant le nom de votre application.

    L'outil aspnet_regiis.exe est installé dans le dossier %systemroot%\Microsoft.NET\Framework\versionNumber.

    L'exemple suivant illustre le chiffrement de la section connectionStrings du fichier Web.config d'une application nommée SampleApplication.

    aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"
    

    Une fois la commande exécutée, vous pouvez consulter le contenu du fichier Web.config. La section de configuration connectionStrings contient des informations chiffrées au lieu d'une chaîne de connexion en texte clair, comme l'illustre l'exemple suivant :

    <configuration>
       <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
          <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>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo=
                      </CipherValue>
                   </CipherData>
                </EncryptedKey>
             </KeyInfo>
             <CipherData>
                <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE=
                </CipherValue>
             </CipherData>
          </EncryptedData>
       </connectionStrings>
    </configuration>
    

    Gardez l'invite de commandes ouverte pour les étapes ultérieures.

  2. Déterminez le compte d'utilisateur ou l'identité sous laquelle ASP.NET s'exécute en récupérant le nom WindowsIdentity actuel.

    L'exemple suivant illustre l'une des méthodes permettant de déterminer le nom de WindowsIdentity :

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    

    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
    RemarqueRemarque

    Par défaut, sur Windows Server 2003, lorsque l'emprunt d'identité est désactivé dans le fichier Web.config pour une application ASP.NET, l'identité sous laquelle l'application s'exécute est le compte SERVICE RÉSEAU. Avec d'autres versions de Windows, ASP.NET s'exécute sous le compte ASPNET local.

    Le compte d'utilisateur ou l'identité sous lequel ASP.NET s'exécute doit avoir un accès en lecture à la clé de chiffrement utilisée pour chiffrer et déchiffrer des sections du fichier Web.config. Cette procédure suppose que votre site Web est configuré avec le RsaProtectedConfigurationProvider par défaut spécifié dans le fichier Machine.config nommé "RsaProtectedConfigurationProvider". Le conteneur de clé RSA utilisé par le RsaProtectedConfigurationProvider par défaut est nommé "NetFrameworkConfigurationKey".

  3. À l'invite de commandes, exécutez l'outil aspnet_regiis.exe avec les options suivantes :

    • option -pa, en lui passant le nom du conteneur de clé RSA du RsaProtectedConfigurationProvider par défaut ;

    • identité de votre application ASP.NET, comme spécifié à l'étape précédente.

    L'exemple suivant montre comment octroyer au compte SERVICE RÉSEAU l'accès au conteneur de clé RSA "NetFrameworkConfigurationKey" de l'ordinateur :

    aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
    
  4. Pour déchiffrer le contenu du fichier Web.config chiffré, exécutez l'outil aspnet_regiis.exe avec l'option -pd. La syntaxe est la même que si vous chiffrez le contenu du fichier Web.config à l'aide de l'option -pe sauf que vous ne spécifiez pas de fournisseur de configuration protégée. Le fournisseur approprié est identifié dans l'attribut configProtectionProvider de la section protégée.

    L'exemple suivant montre comment déchiffrer l'élément connectionStrings de l'application ASP.NET SampleApplication.

    aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"
    

Voir aussi

Afficher: