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

Mise à jour : novembre 2007

Lorsque que vous manipulez des contrôles de source de données, vous devez centraliser l'emplacement de vos chaînes de connexion en les stockant dans le fichier Web.config de l'application. Les avantages sont doubles : vos contrôles de source de données peuvent référencer le nom de la chaîne de connexion du fichier de configuration au lieu d'inclure la chaîne de connexion comme une propriété de contrôle et l'administration de site est plus simple car la gestion de chaînes de connexion est centralisée, ce qui supprime le besoin de visiter de nouveau des pages individuelles si les informations de votre chaîne de connexion sont modifiées.

Dans cette rubrique, vous apprendrez comment placer vos chaînes de connexion dans le fichier Web.config à l'aide de Visual Studio et un contrôle de source de données et comment utiliser l'utilitaire en ligne de commande, Aspnet_regiis.exe, pour chiffrer ces chaînes de connexion afin d'avoir une couche supplémentaire de sécurité.

Comment ajouter une chaîne de connexion à Web.config avec un contrôle de source de données

  1. Ouvrez une page .aspx en mode Design dans Visual Studio.

  2. À partir de la Boîte à outils, du dossier Données, faites glisser un contrôle de source de données, tel qu'un contrôle SqlDataSource, sur l'aire de conception.

  3. Cliquez avec le bouton droit sur le contrôle, puis cliquez sur Afficher la balise active.

  4. Dans le panneau des balises actives, cliquez sur Configurer la source de données.

  5. Dans le panneau Choisir une connexion de données, cliquez sur Nouvelle connexion.

  6. Sélectionnez une source de données appropriée dans la liste de la boîte de dialogue Choisir la source de données, puis cliquez sur OK.

  7. Indiquez le nom de serveur, le nom d'utilisateur et le mot de passe corrects dans la boîte de dialogue Ajouter une connexion, puis cliquez sur OK.

    Vous revenez à la boîte de dialogue Configurer la source de données avec un résumé des détails de votre connexion.

  8. Cliquez sur Suivant, puis cliquez sur Oui pour enregistrer votre chaîne de connexion dans le fichier Web.config.

    La chaîne de connexion est maintenant stockée dans le fichier Web.config et vous pouvez configurer les détails de la requête de votre contrôle.

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\NuméroVersion.

    L'exemple de code 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 de code 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 de code 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);
    %>
    
    Remarque :

    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 de code suivant illustre 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 de code suivant illustre comment déchiffrer l'élément connectionStrings de l'application ASP.NET SampleApplication.

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

Voir aussi

Autres ressources

Chiffrement des informations de configuration à l'aide de la configuration protégée