Procédure pas à pas : chiffrement des informations de configuration à l'aide de la configuration protégée
Mise à jour : novembre 2007
Fournit un exemple pas à pas du chiffrement des sections d'un fichier de configuration d'une application ASP.NET.
La configuration protégée aide à renforcer la sécurité d'une application en vous permettant de chiffrer les informations sensibles stockées dans un fichier Web.config. Vous pouvez utiliser aspnet_regiis.exe pour chiffrer les sections du fichier Web.config et gérer les clés de chiffrement. ASP.NET déchiffre le fichier de configuration lorsqu'il traite le fichier. Par conséquent, le déchiffrement ne requiert pas de code supplémentaire. Pour plus d'informations sur la configuration protégée, consultez Chiffrement des informations de configuration à l'aide de la configuration protégée.
Au cours de cette procédure pas à pas, vous allez apprendre à effectuer les tâches suivantes :
chiffrer les sections d'un fichier Web.config à l'aide du fournisseur de configuration protégée par défaut ;
accéder aux informations de configuration déchiffrées d'une page ASP.NET.
Composants requis
Pour effectuer cette procédure pas à pas, vous aurez besoin des éléments suivants :
Microsoft Internet Information Services (IIS) installé et configuré sur l'ordinateur qui hébergera le site.
Pour plus d'informations sur l'installation et la configuration d'IIS, consultez l'aide en ligne incluse avec l'installation IIS ou accédez à Internet Information Services (IIS) 6.0 Technical Resources.
avoir un site Web ASP.NET.
Si vous avez déjà un site Web, vous pouvez l'utiliser. Sinon, pour plus d'informations sur la création d'un répertoire virtuel ou d'un site Web, consultez Comment : créer et configurer des répertoires virtuels dans IIS 5.0 et 6.0.
Octroi de l'accès en lecture à une clé de chiffrement RSA
Avant qu'ASP.NET ne puisse déchiffrer les informations chiffrées du fichier Web.config, l'identité de votre application ASP.NET doit avoir l'accès en lecture à la clé de chiffrement utilisée pour chiffrer et déchiffrer les sections chiffrées. Cette procédure pas à pas utilise le fournisseur RsaProtectedConfigurationProvider par défaut spécifié dans le fichier Machine.config nommé "RsaProtectedConfigurationProvider". Le conteneur de clé RSA qui est utilisé par le fournisseur RsaProtectedConfigurationProvider par défaut se nomme "NetFrameworkConfigurationKey".
Pour octroyer à l'identité ASP.NET l'accès en lecture au conteneur de clé RSA par défaut
Ouvrez un éditeur de texte, puis copiez le code suivant dans un nouveau fichier.
<%@ Page Language="VB" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name) %>
<%@ Page Language="C#" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>
Enregistrez le fichier dans le répertoire de votre application sous identity.aspx.
Pour déterminer l'identité de votre application ASP.NET, ouvrez identity.aspx dans un navigateur.
L'identité empruntée de votre application ASP.NET s'affiche dans le navigateur.
Remarque : Comme vous utilisez IIS pour cette procédure pas à pas, ne recourez pas à l'emprunt d'identité pour l'authentification de votre site. Autrement dit, pour cette procédure, utilisez uniquement l'authentification anonyme comme identité de votre application ASP.NET. Si l'identité de votre application est l'ID utilisateur sous lequel vous êtes connecté, tel que DOMAINE\myuserid, dans le fichier Web.config de l'application, désactivez l'emprunt d'identité. Pour désactiver l'emprunt d'identité dans le fichier Web.config, ouvrez celui-ci, puis supprimez l'élément <identity>. Une fois que vous avez supprimé l'élément <identity>, mettez à jour le fichier identity.aspx dans votre navigateur pour afficher l'identité modifiée de l'application.
À l'invite de commandes, exécutez aspnet_regiis.exe avec les options suivantes :
option -pa, suivie du 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.
Par exemple, la commande suivante octroie au compte SERVICE RÉSEAU l'accès au conteneur de clé RSA de niveau ordinateur "NetFrameworkConfigurationKey".
Remarque : Sur un ordinateur qui exécute Microsoft Windows Server 2003 avec l'emprunt d'identité pour une application ASP.NET qui est désactivée dans le fichier Web.config, l'identité de l'application est l'identité du pool d'applications. Par défaut, c'est le compte SERVICE RÉSEAU (sur les versions antérieures de Windows, l'identité est le compte ASPNET local).
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
Ne fermez pas la fenêtre d'invite de commandes.
Chiffrement des sections du fichier Web.config
Maintenant que l'identité de votre application ASP.NET possède l'accès en lecture au conteneur de clé RSA pour l'objet RsaProtectedConfigurationProvider par défaut, vous allez chiffrer des sections du fichier Web.config de votre application ASP.NET en utilisant ce conteneur de clé. Puis, ASP.NET déchiffre les sections lorsqu'il traite le fichier Web.config.
Pour chiffrer les sections <connectionStrings> et <machineKey> du fichier Web.config
Dans un éditeur de texte, ouvrez le fichier Web.config de votre application.
- Si vous n'avez pas de fichier Web.config pour votre application ASP.NET, ouvrez un éditeur de texte, copiez l'exemple de configuration dans un nouveau fichier, puis enregistrez le fichier dans votre répertoire d'application ASP.NET sous le nom web.config.
Assurez-vous qu'il y a à la fois un élément enfant <connectionStrings> et un élément <machineKey> enfant pour l'élément <system.web>, comme illustré dans l'exemple suivant.
<configuration> <connectionStrings> <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" /> </connectionStrings> <system.web> <machineKey validationKey="D61B3C89CB33A2F1422FF158AFF7320E8DB8CB5CDA1742572A487D94018787EF42682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="FBF50941F22D6A3B229EA593F24C41203DA6837F1122EF17" /> </system.web> </configuration>
Fermez le fichier Web.config.
À l'invite de commandes, remplacez le répertoire par le répertoire .NET Framework version 2.0 en tapant la commande suivante :
cd \WINDOWS\Microsoft.Net\Framework\v2.0.*
À l'invite de commandes, exécutez aspnet_regiis.exe avec les options suivantes :
l'option -pe et la chaîne "connectionStrings" pour chiffrer l'élément connectionStrings du fichier Web.config de votre application ;
-app et le nom de votre application ;
Par exemple, la commande suivante chiffre la section <connectionStrings> du fichier Web.config d'une application nommée MyApplication.
aspnet_regiis -pe "connectionStrings" -app "/MyApplication"
Répétez l'étape précédente pour l'élément enfant <machineKey> de l'élément <system.web>, comme illustré dans l'exemple suivant :
aspnet_regiis -pe "system.web/machineKey" -app "/MyApplication"
Ne fermez pas la fenêtre d'invite de commandes.
Ouvrez le fichier Web.config et affichez le contenu chiffré.
Le contenu est semblable à l'exemple de fichier Web.config 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> <system.web> <machineKey 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>IwUopItbWX0mJdGWtAqE1LlsG3u5RBRlAXs9/GZj3HEfeUXduHVF76q6Ip88YqlfLthH+DMBYdOZAF+hCOmS2agfTo1tKUvELRGIljS/BqEYxUO+/IOz9tllAw8ZlGF7AVCzptgIejI+iLXEZfMKW7f6EMGeb5vaaKXHIkYZwcM= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>ivVyERVPNUzIb/i7/NUbRkxsxh8IG959vycwrzJO0vYWxHZ5i03SfrLbsGUV17+FxZ6lbcrVaF5FY3zVm7dRMRvQpVFwaVcL </CipherValue> </CipherData> </EncryptedData> </machineKey> </system.web> </configuration>
Fermez le fichier Web.config.
Accès aux paramètres de configuration déchiffrés
ASP.NET déchiffre automatiquement le contenu de Web.config lorsqu'il traite ce fichier. Par conséquent, aucune étape supplémentaire n'est requise pour déchiffrer les paramètres de configuration chiffrés en vue de leur utilisation par d'autres fonctionnalités ASP.NET ou pour accéder aux valeurs de votre code. Toutefois, vous pouvez suivre ces étapes, si vous souhaitez consulter les paramètres déchiffrés.
Pour afficher les valeurs de configuration déchiffrées
Ouvrez un éditeur de texte, puis copiez le code ASP.NET suivant dans un nouveau fichier.
<%@ Page Language="VB" %> <%@ Import Namespace="System.Configuration" %> <%@ Import Namespace="System.Web.Configuration" %> <script > Public Sub Page_Load() ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings ConnectionStringsGrid.DataBind() Dim config As System.Configuration.Configuration = _ WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath) Dim key As MachineKeySection = _ CType(config.GetSection("system.web/machineKey"), MachineKeySection) DecryptionKey.Text = key.DecryptionKey ValidationKey.Text = key.ValidationKey End Sub </script> <html> <body> <form > <asp:GridView CellPadding="4" id="ConnectionStringsGrid" /> <P> MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR> MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" /> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Import Namespace="System.Configuration" %> <%@ Import Namespace="System.Web.Configuration" %> <script > public void Page_Load() { ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings; ConnectionStringsGrid.DataBind(); Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); MachineKeySection key = (MachineKeySection)config.GetSection("system.web/machineKey"); DecryptionKey.Text = key.DecryptionKey; ValidationKey.Text = key.ValidationKey; } </script> <html> <body> <form > <asp:GridView CellPadding="4" id="ConnectionStringsGrid" /> <P> MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR> MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" /> </form> </body> </html>
Enregistrez le fichier sous walkthrough.aspx,, puis consultez le fichier dans le navigateur.
Les valeurs déchiffrées de votre fichier Web.config chiffré s'affichent.
Pour cacher les informations sensibles du site Web privé, supprimez le fichier walkthrough.aspx lorsque vous avez terminé cette procédure.
Étapes suivantes
Vous pouvez, si vous le souhaitez, déchiffrer le contenu du fichier Web.config chiffré en exécutant l'outil aspnet_regiis.exe avec l'option -pd. La syntaxe est la même que celle utilisée pour chiffrer le contenu du fichier Web.config avec l'option -pe, à la différence que vous ne spécifiez pas de fournisseur de configuration protégée. Le fournisseur approprié est identifié à l'aide de l'élément configProtectionProvider de la section protected. Par exemple, les commandes suivantes déchiffrent l'élément <connectionStrings> et l'élément enfant <machineKey> de l'élément <system.web> du fichier Web.config de l'application ASP.NET intitulée MyApplication.
aspnet_regiis -pd "connectionStrings" -app "/MyApplication"
aspnet_regiis -pd "system.web/machineKey" -app "/MyApplication"
Voir aussi
Tâches
Procédure pas à pas : création et exportation d'un conteneur de clé RSA
Autres ressources
Chiffrement des informations de configuration à l'aide de la configuration protégée