Question

J'essaie depuis un certain temps de comprendre comment chiffrer les blocs d'application stockés dans un fichier externe appelé dev_entlib.config.

Je peux voir dans entlib (4.1) qu'il est possible d'utiliser les fournisseurs de protection par défaut pour chiffrer les blocs mais j'ai vraiment besoin de déployer cette application sur différents serveurs et j'aurais donc besoin d'exporter le keyProvider utilisé pour chiffrer les blocs d'application vers ceux-ci. les serveurs.

Ce que j'ai fait jusqu'à présent, c'est ajouter un fournisseur de configuration protégé personnalisé au fichier machine.config dans le dossier .net v2.0* (et tous les serveurs cibles).

le fournisseur personnalisé est comme ça

<add name="MyCompanyProvider" 
    type="System.Configuration.RsaProtectedConfigurationProvider, 
          System.Configuration, Version=2.0.0.0, Culture=neutral, 
          PublicKeyToken=b03f5f7f11d50a3a,
         processorArchitecture=MSIL"
    keyContainerName="MyKey" 
    useMachineContainer="true" />

qui se situe bien à côté des autres fournisseurs par défaut et prend même en charge le moment de la conception dans l'outil de configuration Entlib.Je choisis ensuite le fournisseur de protection pour chaque bloc que je souhaite chiffrer.

En regardant le dev_entlib.config, cela montre qu'en effet le bloc a été chiffré avec mon fournisseur.Mon fournisseur utilise mon conteneur de clés.Par conséquent, le bloc doit être chiffré à l'aide de mon conteneur de clés.J'exporte ensuite "MyKey" vers un fichier XML en utilisant :

c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -px "MyKey" "C:\keys.xml" -pri
Exporting RSA Keys to file...
Succeeded!

Ce fichier de clé est ensuite copié sur mon serveur sysTest où il est importé et dispose de droits d'accès accordés à "NT Authority etwork Services" et "ASPNET".

Je copie ensuite mes web.config et dev_entlib.config chiffrés et j'essaie d'afficher les chaînes de connexion dans une petite page qui utilise .net ConfigurationManager pour obtenir la collection ConnectionStrings et les afficher sur la page.Cette page s'exécute sous IIS et l'identité du processus est « NT Authority etwork Services ».

Le problème c'est que ça ne marche pas !Il y a des erreurs de données incorrectes ou « échec du déchiffrement à l'aide du fournisseur MyCompanyProvider ».

Cette approche me semble logique, mais elle échoue toujours.

Quelqu'un a-t-il d'autres suggestions ?

Était-ce utile?

La solution

Chiffrez les fichiers de configuration externes de l'Enterprise Library avec votre conteneur de clé RSA personnalisé à l'aide de l'outil de configuration de l'Enterprise Library.

  • EntLib (4.1) utilise le fournisseur de protection par défaut RsaProtectedConfigurationProvider.Mais il est possible de supprimer ce fournisseur au sein de votre fichier de configuration et de le remplacer par le vôtre du même nom qui pourra alors pointer vers votre fournisseur de clé personnalisé :"Ma clé".
  • Tu devrais ajouter ceci configProtectedData section du fichier de configuration contenant la région que vous souhaitez chiffrer (par ex.votre fichier externe :*dev_entlib.config*).Vous n'avez pas besoin de modifier le machine.config fichier du tout.
  • Vous pourrez alors choisir le RsaProtectedConfigurationProvider à partir de l'application Enterprise Library Configuration pour le Bloc d'application d'accès aux données Fournisseur de protection.
  • Tu dois ouvrir ça EntLibConfig.exe avec Exécuter en tant qu'administrateur si vous êtes sous Vista, Windows 7, Windows 2008.
    • Sinon, vous obtiendrez une erreur :
      • Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Object already exists.
  • Vous pouvez ensuite copier ce *dev_entlib.config* crypté avec le web.config fichier de configuration sur votre Test système serveur.Ouvrez le web.config fichier avec l'outil de configuration de la bibliothèque d'entreprise sur ce Test système le serveur devrait pas obtenez l'erreur:
    • Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Bad Data.

web.config

Ce fichier est pratiquement vide et pointe simplement vers le fichier de configuration des données externe :

<!-- web.config -->
<configuration>
  <configSections>
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>
  <enterpriseLibrary.ConfigurationSource selectedSource="External Data Configuration File Source">
    <sources>
      <add name="External Data Configuration File Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        filePath="dev_entlib.config" />
    </sources>
  </enterpriseLibrary.ConfigurationSource>
</configuration>

dev_entlib.config

Ce fichier contient les chaînes de connexion et le fournisseur de protection avec lequel il doit être chiffré avec :

<!-- dev_entlib.config -->
<configuration>
    <configSections>
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
 </configSections>
    <dataConfiguration defaultDatabase="MyConnectionStringName" />
 <connectionStrings>
  <add name="cnHnicMediaLibrary" connectionString="Server=MyDbServer; Database=MyDbName; Integrated Security=SSPI"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
  <configProtectedData>
    <providers>
      <remove name="RsaProtectedConfigurationProvider" />
      <add    name="RsaProtectedConfigurationProvider"
        keyContainerName="MyKey"
        useMachineContainer="true"
        description="Uses our own encryption key container so that it will work in a Web Farm setting. We need to trick Enterprise Library, which wants to use the default RsaCryptoServiceProvider to encrypt and decrypt, by replacing this default provider with our own while this configuration is processed!"
        type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
  </configProtectedData>
</configuration>

Basé sur:

J'espère que cela décrit le message d'erreur que vous avez eu et comment le corriger.

Autres conseils

Il ne semble pas être encore possible. Ma solution est de simplement chiffrer les blocs dans le cadre du web.config, puis copier-coller ces blocs dans un fichier entLib.config externe. Ces blocs devrait alors pouvoir être déchiffré sur les serveurs cibles avec la clé exportée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top