Partager via


Procédure pas à pas : création et exportation d'un conteneur de clé RSA

Mise à jour : novembre 2007

Fournit un exemple pas à pas de création, d'exportation et d'importation d'une clé de chiffrement pour déchiffrer les sections chiffrées du fichier Web.config à partir d'un fichier chiffré unique sur plusieurs serveurs.

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 de configuration. L'application .NET Framework déchiffre automatiquement le fichier de configuration lors du traitement de ce dernier et le déchiffrement ne requiert pas de code supplémentaire. Vous pouvez utiliser aspnet_regiis.exe pour chiffrer des sections du fichier de configuration et gérer des clés de chiffrement. Pour plus d'informations sur la configuration protégée, consultez Chiffrement des informations de configuration à l'aide de la configuration protégée.

La configuration protégée vous permet de créer, de supprimer, d'exporter et d'importer des clés de chiffrement personnalisées à utiliser avec le fournisseur RsaProtectedConfigurationProvider. Vous pouvez ainsi créer des copies de sauvegarde de clés de chiffrement ou copier une clé de chiffrement sur plusieurs serveurs Web, par exemple une batterie de serveurs Web, de sorte qu'une application dotée d'un fichier Web.config chiffré pourra être copiée dans plusieurs emplacements.

Au cours de cette procédure pas à pas, vous allez apprendre à effectuer les tâches suivantes :

  • créer un conteneur de clé RSA personnalisé ;

  • spécifier un fournisseur de configuration protégée qui utilise un conteneur de clé RSA personnalisé ;

  • chiffrer les sections d'un fichier Web.config à l'aide d'un conteneur de clé RSA personnalisé ;

  • exporter un conteneur de clé RSA personnalisé vers un fichier XML ;

  • importer un conteneur de clé RSA personnalisé depuis un fichier XML.

Composants requis

Pour effectuer cette procédure pas à pas, vous aurez besoin des éléments suivants :

Création d'un conteneur de clé RSA personnalisé

Dans cette partie de la procédure pas à pas, vous allez créer un conteneur de clé RSA en utilisant aspnet_regiis.exe avec l'option -pc. Cela identifie le conteneur de clé RSA comme un conteneur de clé de niveau utilisateur. Vous devez identifier les conteneurs de clé RSA en tant qu'utilisateur (à l'aide de l'option -pku), ou en tant qu'ordinateur (à l'aide de l'option -pku). Pour plus d'informations sur les conteneurs de clé RSA ordinateur et utilisateur, consultez Description des conteneurs de clé RSA au niveau de l'ordinateur et au niveau de l'utilisateur.

Pour créer un conteneur de clé RSA au niveau de l'ordinateur

  1. Ouvrez une invite de commandes.

    • À cette fin, dans Microsoft Windows, cliquez sur Démarrer, puis sur Exécuter, et dans la zone Ouvrir, tapez cmd, puis cliquez sur OK.
  2. Dans la fenêtre d'invite de commandes, entrez la commande pour remplacer le répertoire par le répertoire .NET Framework version 2.0 :

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  3. Créez un conteneur de clé RSA au niveau ordinateur en exécutant l'outil aspnet_regiis.exe avec les options suivantes :

    • option -pc, suivie du nom du conteneur de clé RSA, pour créer la paire de clés RSA ;

    • option -exp, pour vérifier que la clé est exportable.

    La commande suivante crée le conteneur de clé "MyKeys".

    aspnet_regiis -pc "MyKeys" -exp

    Ne fermez pas la fenêtre d'invite de commandes.

Octroi de l'accès en lecture à une clé de chiffrement RSA

Avant qu'ASP.NET 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.

Pour octroyer à l'identité ASP.NET l'accès au conteneur de clé RSA

  1. 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);
    %>
    
  2. Enregistrez le fichier dans le répertoire de votre application sous identity.aspx.

  3. 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 :

    Pour cette procédure pas à pas, n'utilisez pas l'authentification par emprunt d'identité pour votre site. Autrement dit, utilisez uniquement l'authentification anonyme comme identité de votre application ASP.NET. Pour cette procédure pas à pas, si l'identité de votre application est l'ID utilisateur sous lequel vous êtes connecté, tel que DOMAINE\idutilisateur, dans le fichier Web.config de l'application, désactivez l'emprunt d'identité. Pour désactiver l'emprunt d'identité, modifiez le fichier Web.config et supprimez l'élément <identity>. Une fois que vous avez apporté cette modification, mettez à jour le fichier identity.aspx dans votre navigateur pour afficher l'identité modifiée de l'application.

  4. À l'invite de commandes, utilisez les options suivantes pour accorder l'accès d'identité au conteneur de clé RSA en exécutant aspnet_regiis.exe :

    • option -pa suivie par le nom du conteneur de clé RSA "MyKeys" ;

    • 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 "MyKeys".

    Remarque :

    Sur un ordinateur qui fonctionne sous Windows Server 2003 et sur lequel l'emprunt d'identité pour une application ASP.NET est désactivé dans le fichier Web.config, l'identité pour l'application est le compte SERVICE RÉSEAU (pour les versions antérieures de Windows, c'est le compte ASPNET local).

    aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"

Spécification d'un fournisseur de configuration protégée

Dans cette partie de la procédure pas à pas, vous allez spécifier une instance de fournisseur de configuration protégée dans le fichier Web.config de votre application ASP.NET. L'instance du fournisseur de configuration protégée qui utilise le conteneur de clé RSA au niveau ordinateur nommé "MyKeys" est celle que vous avez créée dans la procédure précédente.

Pour spécifier l'instance d'un fournisseur de configuration protégée

  1. Ouvrez un éditeur de texte, puis ouvrez le fichier Web.config de votre application ASP.NET.

    • Si votre application ASP.NET n'a pas de fichier Web.config, ouvrez un éditeur de texte et copiez l'exemple de configuration dans un nouveau fichier. Enregistrez le fichier dans le répertoire de votre application ASP.NET sous web.config.
  2. Vérifiez que la configuration inclut un élément <<connectionStrings>, comme le décrit l'exemple suivant.

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  3. Ajoutez une section <configProtectedData> qui inclut une instance de la classe RsaProtectedConfigurationProvider nommée "MyProvider" et qui utilise le conteneur de clé RSA au niveau ordinateur nommé "MyKeys", comme illustré dans l'exemple suivant.

    <configuration>
       <configProtectedData>
          <providers>
             <add name="MyProvider"
                  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,
                        Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                        processorArchitecture=MSIL"
                  keyContainerName="MyKeys" 
                  useMachineContainer="true" />
          </providers>
       </configProtectedData>
    
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  4. Enregistrez, puis fermez le fichier Web.config.

Chiffrement des sections du fichier Web.config

Maintenant que vous avez spécifié une instance de la classe RsaProtectedConfigurationProvider qui utilise le conteneur de clé RSA "MyKeys" et que l'identité de votre application ASP.NET possède l'accès en lecture à "MyKeys", vous allez chiffrer les sections du fichier Web.config de votre application ASP.NET en utilisant "MyKeys", puis ASP.NET déchiffrera les sections lors du traitement du fichier Web.config.

Pour chiffrer la section <connectionStrings> du fichier Web.config

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

    • option -pe, suivie de "connectionStrings", pour chiffrer l'élément <connectionStrings> du fichier Web.config de votre application ;

    • option -app, pour identifier le nom de votre application ;

    • option -prov, suivie par "MyProvider", pour identifier le fournisseur RsaProtectedConfigurationProvider qui a été spécifié dans le fichier Web.config de la section précédente.

    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" -prov "MyProvider"

  2. Ouvrez le fichier Web.config et affichez le contenu chiffré.

    Le contenu est semblable à l'exemple de fichier Web.config suivant.

    <configuration>
       <configProtectedData>
          <providers>
             <add name="MyProvider"
                  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,
                        Culture=neutral, PublicKeyToken= b03f5f7f11d50a3a,
                        processorArchitecture=MSIL"
                  keyContainerName="MyKeys" 
                  useMachineContainer="true" />
          </providers>
       </configProtectedData>
    
       <connectionStrings configProtectionProvider="MyProvider">
          <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>
    
  3. 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 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

  1. Ouvrez un éditeur de texte, puis copiez le code ASP.NET suivant dans un nouveau fichier.

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Configuration" %>
    <script >
    
    Public Sub Page_Load()
    
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings
      ConnectionStringsGrid.DataBind()
    End Sub
    
    </script>
    <html>
    
    <body>
    
    <form >
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Configuration" %>
    <script >
    
    public void Page_Load()
    {
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings;
      ConnectionStringsGrid.DataBind();
    }
    
    </script>
    <html>
    
    <body>
    
    <form >
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
  2. 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.

Exportation et importation d'un conteneur de clé RSA

Vous pouvez exporter un conteneur de clé RSA vers un fichier XML en tant que copie de sauvegarde des valeurs de clés ou pour copier le conteneur de clé vers des serveurs Web supplémentaires qui hébergeront une copie de l'application incluant le fichier Web.config chiffré. Sans le conteneur de clé RSA spécifique utilisé pour chiffrer le fichier Web.config, ASP.NET ne peut pas déchiffrer les valeurs de configuration chiffrées.

Pour afficher les valeurs de configuration déchiffrées

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

    • option -px, suivie par "MyKeys", qui est le nom du conteneur de clé RSA que vous avez créé dans « Création d'un conteneur de clé RSA personnalisé » plus haut dans cette procédure pas à pas.

    • chemin d'accès à un fichier xml vers lequel exporter le conteneur de clé ;

    • option -pri, pour vérifier que les informations de la clé privée sont exportées. Sinon, les informations de clés exportées pourront chiffrer les informations, mais pas les déchiffrer.

    Par exemple, la commande suivante exporte le conteneur de clé RSA au niveau ordinateur nommé "MyKeys" vers un fichier .xml nommé keys.xml dans le répertoire racine du lecteur C.

    aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri

    Remarque :

    Pour s'assurer que personne ne puisse déchiffrer les fichiers Web.config qui sont chiffrés par le conteneur de clé RSA, après avoir exporté le conteneur de clé RSA vers un fichier .xml, copiez le fichier .xml vers un emplacement externe au serveur Web, puis supprimez le fichier du serveur Web.

    Vous disposez maintenant de toutes les informations qui sont requises pour copier l'application sur un serveur Web distinct en utilisant le fichier Web.config chiffré.

  2. Si vous souhaitez copier l'application sur un serveur Web distinct en utilisant le fichier Web.config chiffré, passez à étape 4.

  3. Si vous n'avez pas de second serveur Web sur lequel copier l'application Web, et que vous souhaitez poursuivre cette procédure pas à pas, complétez les étapes suivantes afin de supprimer le conteneur de clé RSA du serveur Web. Puis, traitez le serveur Web comme s'il s'agissait du second serveur Web.

    1. Pour supprimer le conteneur de clé RSA, à l'invite de commandes, exécute aspnet_regiis.exe avec le commutateur -pz, suivi de "MyKeys".

      Par exemple, la commande suivante supprime "MyKeys" :

      aspnet_regiis -pz "MyKeys"

    2. Passez à étape 5.

  4. Copiez l'application Web avec le fichier Web.config chiffré vers un deuxième serveur Web.

  5. Sur le deuxième serveur, ouvrez une fenêtre Invite de commandes, puis entrez la commande suivante pour remplacer le répertoire par le répertoire .NET Framework version 2.0 :

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  6. Copiez le fichier .xml qui contient le conteneur de clé RSA exporté vers le répertoire .NET Framework version 2.0 du second serveur Web.

    Dans cette procédure pas à pas, vous allez copier le fichier keys.xml vers le répertoire racine du lecteur C.

  7. Sur le deuxième serveur Web, à l'invite de commandes, exécutez aspnet_regiis.exe avec les options suivantes :

    • option -pi, suivie de "MyKeys", qui correspond au nom du conteneur de clé exporté, pour importer le conteneur de clé RSA ;

    • chemin d'accès du fichier XML qui contient le conteneur de clé exporté ;

    par exemple, la commande suivante importe le conteneur de clé RSA nommé "MyKeys".

    aspnet_regiis -pi "MyKeys" "c:\keys.xml"

  8. Sur le deuxième serveur Web, supprimez la copie du fichier .xml qui contient le conteneur de clé RSA exporté.

  9. Sur le deuxième serveur Web, déterminez l'identité de l'application ASP.NET et octroyez à cette identité l'accès au conteneur de clé RSA importé à l'aide des étapes décrites plus haut dans la section intitulée « Octroi de l'accès en lecture à une clé de chiffrement RSA ».

  10. Sur le deuxième serveur Web, affichez les paramètres de configuration déchiffrés du fichier Web.config chiffré en suivant les étapes de la section précédente.

Voir aussi

Tâches

Procédure pas à pas : chiffrement des informations de configuration à l'aide de la configuration protégée

Autres ressources

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