Version imprimable       Envoyer     
Cliquez pour évaluer et commenter
MSDN
MSDN Library
Articles Techniques
Développement .NET
Prescriptive Guidance
Securité
How To
 Procédure : Utiliser DPAPI (magasin...
Procédure : Utiliser DPAPI (magasin de l'ordinateur) à partir de ASP.NET
Dernière mise à jour le 31 août 2004
Sur cette page

Objectifs Objectifs
S'applique à S'applique à
Résumé Résumé
Avant de commencer Avant de commencer
Créer une application Web ASP.NET cliente Créer une application Web ASP.NET cliente
Tester l'application Tester l'application
Modifier l'application Web pour lire une chaîne de connexion cryptée à partir de Web.Config Modifier l'application Web pour lire une chaîne de connexion cryptée à partir de Web.Config
Ressources supplémentaires Ressources supplémentaires

Objectifs

Ce module vous permet d'effectuer les opérations suivantes :

  • créer une application Web qui utilise la bibliothèque de cryptage DPAPI générée dans le cadre de la section « Procédure : Créer une bibliothèque DPAPI » afin de crypter et de décrypter les données sensibles ;

  • lire les données cryptées du fichier Web.config.

S'applique à

Ce module s'applique aux produits et technologies suivants :

  • Microsoft® Windows® XP ou Windows 2000 Server (avec le Service Pack 3) et systèmes d'exploitation ultérieurs

  • Microsoft .NET Framework version 1.0 (avec le Service Pack 2)

  • Microsoft Visual C#® .NET

Résumé

Les applications Web doivent souvent stocker dans les fichiers de configuration d'application des données sensibles, telles que les chaînes de connexion de base de données et les informations d'identification de compte de service. Pour des raisons de sécurité, ces éléments ne doivent jamais être stockés sous forme de texte brut. Ces informations doivent toujours être cryptées avant leur stockage.

Ce module décrit comment utiliser la bibliothèque de cryptage DPAPI (Data Protection API) créée dans la section « Procédure : Créer une bibliothèque DPAPI » à partir d'une application ASP.NET pour protéger les données sensibles et comment lire les informations cryptées qui sont stockées dans le fichier Web.config. Vous découvrirez également comment utiliser le magasin de clés DPAPI.

Avant de commencer

Avant d'utiliser ce module, vous devez tenir compte des points suivants :

  • DPAPI peut fonctionner avec le magasin de l'ordinateur ou celui de l'utilisateur (qui nécessite un profil d'utilisateur chargé). DPAPI exploite par défaut le magasin d'utilisateurs, même s'il est possible d'indiquer que le magasin de l'ordinateur peut être utilisé en transmettant l'indicateur CRYPTPROTECT_LOCAL_MACHINE aux fonctions DPAPI.

  • La méthode du profil d'utilisateur permet de faire appel à une couche de sécurité supplémentaire, car elle limite à certaines personnes l'accès au secret. Seul l'utilisateur qui crypte les données peut les décrypter. Cependant, l'emploi du profil d'utilisateur nécessite un effort de développement supplémentaire lorsque l'interface DPAPI est utilisée à partir d'une application Web ASP.NET. Vous devrez en effet réaliser des opérations explicites pour charger et décharger les profils d'utilisateurs (ASP.NET ne charge pas automatiquement les profils d'utilisateurs).

  • La méthode du magasin de l'ordinateur (adoptée dans cette procédure) est plus simple à développer, car elle ne nécessite pas de gestion des profils d'utilisateurs. Toutefois, à moins qu'un paramètre d'entropie supplémentaire ne soit défini, cette méthode est moins sûre car tous les utilisateurs de l'ordinateur peuvent décrypter les données (l'entropie est une valeur aléatoire conçue pour compliquer le déchiffrage du secret). L'utilisation d'un paramètre d'entropie supplémentaire présente toutefois un inconvénient. Ce paramètre doit en effet être stocké de manière sécurisée par l'application, ce qui complique la gestion des clés.

    Remarque : si vous utilisez DPAPI avec le magasin de l'ordinateur, la chaîne cryptée est associée à un ordinateur particulier et vous devez par conséquent générer les données cryptées sur chaque ordinateur. Ne copiez pas les données cryptées sur plusieurs ordinateurs organisés en ferme ou en cluster.

  • Pour plus d'informations sur l'emploi de la bibliothèque DPAPI avec le magasin d'utilisateurs à partir d'une application Web ASP.NET (à l'aide d'un composant desservi dans une application Microsoft Enterprise Services), consultez la section « Procédure : Utiliser DPAPI (magasin d'utilisateurs) à partir de ASP.NET avec les services Microsoft Enterprise Services » dans ce guide.

Créer une application Web ASP.NET cliente

Cette procédure permet de créer une application Web ASP.NET cliente qui fait ensuite appel à la bibliothèque de classes DPAPI pour crypter et décrypter les données stockées dans le fichier Web.config.

  • Pour créer une application Web ASP.NET cliente

    1. Démarrez Visual Studio .NET et créez une application Web ASP.NET Visual C# appelée DPAPIClientWeb.

    2. Ajoutez une référence à l'assembly DataProtector.dll, créé précédemment sous « Procédure : Créer une bibliothèque DPAPI ».

    3. Ouvrez WebForm1.aspx.cs et ajoutez les instructions using suivantes en haut du fichier, sous les instructions using existantes.

      using System.Text;
      using DataProtection;
      
    4. Ajoutez à WebForm1.aspx les contrôles mentionnés dans le tableau 1.

      Tableau 1 : Contrôles WebForm1.aspx

      Type de contrôle

      Texte

      ID

      Bouton

      Crypter

      btnEncrypt

      Bouton

      Décrypter

      btnDecrypt

      Zone de texte

       

      txtDataToEncrypt

      Zone de texte

       

      txtEncryptedData

      Zone de texte

       

      txtDecryptedData

      Étiquette

       

      lblError

      Étiquette

      Données à crypter

       

      Étiquette

      Données cryptées

       

      Étiquette

      Données décryptées

       

      Votre formulaire Web doit être similaire à celui de la figure 1.

      Formulaire Web DPAPIClientWeb

      Figure 1
      Formulaire Web DPAPIClientWeb

    5. Double-cliquez sur le bouton Crypter pour créer un gestionnaire d'événements de clic de bouton.

      DataProtector dp = new DataProtector( DataProtector.Store.
      USE_MACHINE_STORE );try
      {
        byte[] dataToEncrypt = Encoding.ASCII.GetBytes(txtDataToEncrypt.Text);
        // Entropie facultative non transmise dans cet exemple
        // Pourrait transmettre une valeur aléatoire (stockée par l'application) pour une sécurité 
        renforcée
        // lors de l'utilisation de DPAPI avec le magasin de l'ordinateur.
        txtEncryptedData.Text =
                      Convert.ToBase64String(dp.Encrypt(dataToEncrypt,null));
      }
      catch(Exception ex)
      {
        lblError.ForeColor = Color.Red;
        lblError.Text = "Exception.<br>" + ex.Message;
        return;
      }
      lblError.Text = "";
      
    6. Revenez au formulaire Web et double-cliquez sur le bouton Décrypter. Ajoutez le code suivant au gestionnaire d'événements de clic de bouton.

      DataProtector dp = new DataProtector(DataProtector.
      Store.USE_MACHINE_STORE);try
      {
        byte[] dataToDecrypt = Convert.FromBase64String(txtEncryptedData.Text);
        // Le paramètre d'entropie facultatif est null. 
        // Si l'entropie a été utilisée au sein de la méthode Encrypt, le même paramètre
         d'entropie
        // doit être fourni ici
        txtDecryptedData.Text = 
                           Encoding.ASCII.GetString(dp.Decrypt(dataToDe
                           crypt,null));
      }
      catch(Exception ex)
      {
        lblError.ForeColor = Color.Red;
        lblError.Text = "Exception.<br>" + ex.Message;
        return;
      }
      lblError.Text = "";
      
    7. Dans le menu Générer, choisissez Générer la solution.

Tester l'application

Cette procédure teste l'application Web pour vérifier que les données ont été correctement cryptées et décryptées.

  • Pour tester l'application

    1. Appuyez sur les touches Ctrl+F5 pour exécuter l'application Web.

    2. Entrez une chaîne dans la zone de texte Données à crypter et cliquez sur Crypter.
      Vérifiez que les données cryptées (au format de codage Base64) sont affichées dans la zone de texte Données cryptées.

    3. Cliquez sur le bouton Décrypter.
      Vérifiez que les données cryptées ont été correctement décryptées et affichées dans la zone de texte Données décryptées.

Modifier l'application Web pour lire une chaîne de connexion cryptée à partir de Web.Config

Cette procédure permet de choisir une chaîne cryptée de connexion de base de données et de placer le texte codé et crypté dans le fichier Web.config de l'application, au sein d'un élément <appSettings>. Vous ajouterez ensuite du code à lire et décrypterez cette chaîne à partir du fichier de configuration.

  • Pour modifier l'application Web afin de lire une chaîne de connexion cryptée à partir de Web.config

    1. Revenez dans Visual Studio .NET et affichez WebForm1.aspx en mode Concepteur.

    2. Ajoutez un autre bouton au formulaire. Attribuez à la propriété Text la valeur Décrypter la chaîne du fichier de configuration et associez sa propriété ID à la valeur btnDecryptConfig.

    3. Double-cliquez sur le bouton pour créer un gestionnaire d'événements de clic de bouton.

    4. Ajoutez l'instruction using suivante en haut du fichier, sous les instructions using existantes.

      using System.Configuration;
      
    5. Revenez au gestionnaire d'événements btnDecryptConfig_Click et ajoutez le code suivant pour récupérer une chaîne de connexion de base de données à partir de la section <appSettings> du fichier Web.config.

      DataProtector dp = new DataProtector(DataProtector.
      Store.USE_MACHINE_STORE);try
      {
        string appSettingValue =
                  ConfigurationSettings.AppSettings["connectionString"];
        byte[] dataToDecrypt = Convert.FromBase64String(app
        SettingValue);
        string connStr = Encoding.ASCII.GetString(
                                     dp.Decrypt(dataToDecrypt,null));
        txtDecryptedData.Text = connStr;
      }
      catch(Exception ex)
      {
        lblError.ForeColor = Color.Red;
        lblError.Text = "Exception.<br>" + ex.Message;
        return;
      }
      lblError.Text = "";
      
    6. Dans le menu Générer, choisissez Générer la solution pour reconstruire les projets.

    7. Cliquez avec le bouton droit sur WebForm1.aspx et cliquez sur Afficher dans le navigateur.

    8. Entrez dans le champ Données à crypter une chaîne de connexion similaire à la chaîne suivante.

      server=(local);Integrated Security=SSPI; database=Northwind
      
    9. Cliquez sur le bouton Crypter.

    10. Sélectionnez le texte codé et crypté, puis copiez-le dans le Presse-papiers.

    11. Basculez vers Visual Studio .NET, ouvrez Web.config et ajoutez l'élément <appSettings> suivant en dehors de l'élément <system.web>. Associez la chaîne de connexion cryptée actuellement dans le Presse-papiers à l'attribut value.

      <appSettings>
         <add key="connectionString" value="chaîne de connexion cryptée" /> 
      </appSettings>
      
    12. Enregistrez le fichier Web.config.

    13. Cliquez sur le bouton Décrypter la chaîne du fichier de configuration, puis vérifiez que la chaîne de connexion de base de données cryptée est lisible dans le fichier Web.config et que la chaîne de connexion décryptée apparaît correctement dans le champ Données décryptées.

Ressources supplémentaires

Pour plus d'informations, consultez les modules suivants :

  • « Procédure : Créer une bibliothèque DPAPI ».

  • « Procédure : Utiliser DPAPI (magasin d'utilisateurs) à partir de ASP.NET avec les services Microsoft Enterprise Services ».

© 2009 Microsoft Corporation. Tous droits réservés. Conditions d'utilisation | Marques | Confidentialité
Page view tracker