Procédure : Stocker une chaîne de connexion cryptée dans le Registre
Dernière mise à jour le 31 août 2004
Sur cette page
Objectifs
S'applique à
Comment utiliser ce module
Résumé
Points à connaître
Stocker les données cryptées dans le Registre
Créer une application Web ASP.NET
Ressources supplémentaires
Objectifs
Ce module vous permet d'effectuer les opérations suivantes :
stocker une chaîne cryptée de connexion de base de données dans le Registre ;
lire une chaîne cryptée de connexion de base de données dans le Registre et la décrypter.
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) et versions ultérieures
Microsoft Visual C#® .NET
Comment utiliser ce module
Pour tirer le meilleur parti possible de ce module :
Vous devez être familiarisé avec la programmation en Visual C# .NET.
Vous devez être familiarisé avec l'environnement de développement Microsoft Visual Studio® .NET.
Vous devez être familiarisé avec le développement d'applications Web à l'aide de ASP.NET.
Vous serez amené à créer la bibliothèque de cryptage générique décrite dans la section « Procédure : Créer une bibliothèque de cryptage ». Cette bibliothèque fournit les fonctionnalités utilisées dans ce module pour crypter et décrypter la chaîne de connexion de base de données.
Consultez la section « Stockage sécurisé des chaînes de connexion de base de données » dans le Module 12, « Sécurité de l'accès aux données ». Cette section contient des informations concernant les techniques de stockage sécurisé des chaînes de connexion de base de données.
Résumé
Le choix de l'emplacement à adopter pour stocker les chaînes de connexion de base de données pose régulièrement problème aux développeurs qui écrivent des applications permettant d'accéder à des bases de données. Le Registre est l'un des emplacements possibles. Cependant, bien que les différentes clés du Registre puissent être sécurisées à l'aide des listes de contrôle d'accès (ACL) Windows, vous devez, pour plus de sécurité, stocker les chaînes uniquement après les avoir cryptées.
Ce module décrit comment stocker dans le Registre une chaîne de connexion à une base de données sous forme cryptée et comment extraire cette chaîne à partir d'une application Web ASP.NET. Vous serez amené à utiliser la bibliothèque de cryptage générique créée dans la section « Procédure : Créer une bibliothèque de cryptage ».
Points à connaître
Avant d'utiliser ce module, vous devez tenir compte des points suivants :
La chaîne de connexion, le vecteur d'initialisation et la clé utilisés pour le cryptage seront stockés dans le Registre en tant que valeurs nommées sous la clé de Registre suivante :
``` HKEY_LOCAL_MACHINE\Software\TestApplication ```
Le vecteur d'initialisation et la clé doivent être stockés afin de permettre le décryptage de la chaîne de connexion.
Stocker les données cryptées dans le Registre
Cette procédure permet de créer une application Windows qui sera utilisée pour crypter un exemple de chaîne de base de données et stocker celle-ci dans le Registre.
Pour stocker les données cryptées dans le Registre
Démarrez Visual Studio .NET et créez un projet Visual C# Windows nommé EncryptionTestApp.
Ajoutez une référence d'assembly à l'assembly Encryption.dll. Pour créer cet assembly, vous devez effectuer les opérations décrites dans la section « Procédure : Créer une bibliothèque de cryptage » dans ce guide.
Ajoutez les instructions using suivantes en haut du fichier Form1.cs, sous les instructions using existantes.
using Encryption; using System.Text; using Microsoft.Win32;
Ajoutez à Form1 les contrôles mentionnés dans le tableau 1 et organisez-les comme illustré dans la figure 1.
Tableau 1 : Contrôles EncryptionTestApp
Contrôle Texte ID Étiquette Chaîne de connexion :
Zone de texte
txtConnectionString Étiquette Clé :
Zone de texte
txtKey Étiquette Vecteur d'initialisation :
Zone de texte
txtInitializationVector Étiquette Chaîne cryptée
Zone de texte
txtEncryptedString Étiquette Chaîne décryptée
Zone de texte
txtDecryptedString Bouton Crypter btnEncrypt Bouton Décrypter btnDecrypt Bouton Écrire les données dans le Registre btnWriteRegistryData Figure 1
Boîte de dialogue Harnais de test de cryptageDéfinissez la propriété Text de txtConnectionString de la façon suivante :
"Server=local; database=pubs; uid=Bernard; pwd=Password"
Définissez la propriété Text de txtKey de la façon suivante :
"0123456789012345"
La longueur de la clé est de 16 octets pour correspondre à l'algorithme de cryptage Triple DES.
Définissez la propriété Text de Form1 de la façon suivante :
"Harnais de test de cryptage"
Double-cliquez sur le bouton Crypter pour créer un gestionnaire d'événements de clic de bouton et ajoutez le code suivant à ce gestionnaire.
try { // Créer l'objet de cryptage, en indiquant 3DES comme // algorithme de cryptage. Encryptor enc = new Encryptor(EncryptionAlgorithm.TripleDes); // Extraire la chaîne de connexion sous la forme d'un tableau d'octets. byte[] plainText = Encoding.ASCII.GetBytes(txtConnectionString.Text); byte[] key = Encoding.ASCII.GetBytes(txtKey.Text); // Effectuer le cryptage. byte[] cipherText = enc.Encrypt(plainText, key); // Stocker le vecteur d'initialisation car celui-ci sera nécessaire // pour le décryptage. txtInitializationVector.Text = Encoding.ASCII.GetString(enc.IV); // Afficher la chaîne cryptée. txtEncryptedString.Text = Convert.ToBase64String(cipherText); } catch(Exception ex) { MessageBox.Show("Exception liée au cryptage : " + ex.Message, "Harnais de test de cryptage"); }
Revenez au formulaire Form1 en mode Concepteur et double-cliquez sur le bouton Décrypter pour créer un gestionnaire d'événements de clic de bouton.
Ajoutez le code suivant au gestionnaire d'événements du bouton Décrypter.
try { // Configurer l'objet Decryptor. Decryptor dec = new Decryptor(EncryptionAlgorithm.TripleDes); // Définir le vecteur d'initialisation. dec.IV = Encoding.ASCII.GetBytes(txtInitializationVector.Text); byte[] key = Encoding.ASCII.GetBytes(txtKey.Text); // Effectuer le décryptage. byte[] plainText = dec.Decrypt(Convert.FromBase64String( txtEncryptedString.Text), key); // Afficher la chaîne décryptée. txtDecryptedString.Text = Encoding.ASCII.GetString(plainText); } catch(Exception ex) { MessageBox.Show("Exception liée au décryptage. " + ex.Message, "Harnais de test de cryptage"); }
Revenez au formulaire Form1 en mode Concepteur et double-cliquez sur le bouton Écrire les données dans le Registre pour créer un gestionnaire d'événements de clic de bouton.
Ajoutez le code suivant au gestionnaire d'événements.
// Créer une clé de Registre et des valeurs nommées. RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software",true); rk = rk.CreateSubKey("TestApplication"); // Écrire une chaîne cryptée, un vecteur d'initialisation et une clé dans le Registre. rk.SetValue("connectionString",txtEncryptedString.Text); rk.SetValue("initVector",Convert.ToBase64String( Encoding.ASCII.GetBytes(txtInitializationVector.Text))); rk.SetValue("key",Convert.ToBase64String(Encoding.ASCII.GetBytes( txtKey.Text))); MessageBox.Show("Les données ont été écrites dans le Registre.");
Exécutez l'application et cliquez sur Crypter.
La chaîne de connexion cryptée apparaît dans le champ Chaîne cryptée.Cliquez sur Décrypter.
La chaîne d'origine apparaît dans le champ Chaîne décryptée.Cliquez sur Écrire les données dans le Registre.
Dans la zone de message, cliquez sur OK.
Exécutez regedit.exe et affichez le contenu de la clé suivante.
HKLM\Software\TestApplication
Vérifiez que les valeurs codées sont présentes pour les valeurs nommées connectionString, initVector et key.
Fermez regedit et testez l'application de harnais de test.
Créer une application Web ASP.NET
Cette procédure permet de développer une application Web ASP.NET simple destinée à extraire la chaîne de connexion cryptée du Registre puis à la décrypter.
Pour créer une application ASP.NET
Créez une application Web ASP.NET Visual C# nommée EncryptionWebApp.
Ajoutez une référence d'assembly à l'assembly Encryption.dll.
Pour créer cet assembly, vous devez effectuer les opérations décrites dans la section « Procédure : Créer une bibliothèque de cryptage » dans ce guide.Ouvrez Webform1.aspx.cs et ajoutez les instructions using suivantes en haut du fichier, sous les instructions using existantes.
using Encryption; using System.Text; using Microsoft.Win32;
Ajoutez à WebForm1.aspx les contrôles mentionnés dans le tableau 2.
Tableau 2 : Contrôles WebForm1.aspx
Contrôle Texte ID Étiquette
lblEncryptedString Étiquette
lblDecryptedString Bouton Obtenir la chaîne de connexion btnGetConnectionString Double-cliquez sur le bouton Obtenir la chaîne de connexion pour créer un gestionnaire d'événements de clic de bouton.
Ajoutez le code suivant au gestionnaire d'événements.
RegistryKey rk = Registry.LocalMachine.OpenSubKey( @"Software\TestApplication",false); lblEncryptedString.Text = (string)rk.GetValue("connectionString"); string initVector = (string)rk.GetValue("initVector"); string strKey = (string)rk.GetValue("key"); Decryptor dec = new Decryptor(EncryptionAlgorithm.TripleDes ); dec.IV = Convert.FromBase64String(initVector); // Décrypter la chaîne. byte[] plainText = dec.Decrypt(Convert.FromBase64String( lblEncryptedString.Text), Convert.FromBase64String(strKey)); lblDecryptedString.Text = Encoding.ASCII.GetString(plainText);
Dans le menu Générer, choisissez Générer la solution.
Cliquez avec le bouton droit sur Webform1.aspx dans l'Explorateur de solutions et cliquez sur Afficher dans le navigateur.
Cliquez sur Obtenir la chaîne de connexion.
Les chaînes de connexion cryptées et décryptées apparaissent sur le formulaire Web.
Ressources supplémentaires
Pour plus d'informations, consultez la section « Procédure : Créer une bibliothèque de cryptage » dans ce guide.