Question

Je rencontre un problème que j'ai eu auparavant ;je ne trouve pas ma référence sur la façon de le résoudre.

Voici le problème.Nous chiffrons la section des chaînes de connexion dans le app.config pour notre application client en utilisant le code ci-dessous :

        config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
        If config.ConnectionStrings.SectionInformation.IsProtected = False Then
            config.ConnectionStrings.SectionInformation.ProtectSection(Nothing)

            ' We must save the changes to the configuration file.'
            config.Save(ConfigurationSaveMode.Modified, True)
        End If

Le problème est que nous avons eu le congé d'un vendeur.L'ancien ordinateur portable va à un nouveau vendeur et sous la connexion du nouvel utilisateur, lorsqu'il essaie de le faire, nous obtenons une erreur.L'erreur est :

Unhandled Exception: System.Configuration.ConfigurationErrorsException: 
An error occurred executing the configuration section handler for connectionStrings. ---> System.Configuration.ConfigurationErrorsException: Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. 
Error message from the provider: Object already exists.
---> System.Security.Cryptography.CryptographicException: Object already exists
Était-ce utile?

La solution 2

J'ai trouvé une solution plus élégante que dans ma réponse originale à moi-même.J'ai découvert que si je venais de me connecter en tant qu'utilisateur qui avait installé l'application à l'origine et que les chaînes de connexion du fichier de configuration étaient cryptées, j'allais dans le répertoire du framework .net dans une invite de commande et exécutais

aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"

il a donné à l'autre utilisateur l'autorisation d'accéder au conteneur de clé de chiffrement RSA et cela fonctionne ensuite pour le ou les autres utilisateurs.

Je voulais juste l'ajouter ici car je pensais avoir blogué ce problème sur notre blog de développement, mais je l'ai trouvé ici, donc au cas où j'aurais besoin de le rechercher à nouveau, ce sera ici.J'ajouterai également un lien vers notre blog de développement sur ce fil.

Autres conseils

http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603

copier-coller :D

lundi 12 février 2007 00h15 par Naica

concernant:Chiffrement des fichiers de configuration à l'aide d'une configuration protégée

Voici une liste de toutes les étapes que j'ai effectuées pour chiffrer deux sections sur mon PC, puis les déployer sur le serveur Web.Peut-être que ça aidera quelqu'un... :

  1. Pour créer un conteneur de clé RSA au niveau de la machine

    aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
    
  2. Ajoutez ceci à web.config avant la section connectionStrings :

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

    Ne manquez pas le <clear /> d'en haut!Important lorsque vous jouez plusieurs fois avec le cryptage/déchiffrement

  3. Vérifiez que cela se trouve en haut du fichier Web.Config.S'il manque, ajoutez-le :

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    
  4. Enregistrez et fermez le fichier Web.Config dans VS (très important !)

  5. Dans la fenêtre d'invite de commande (mon PC local), accédez à :

    C:\WINNT\Microsoft.NET\Framework\v2.0.50727

  6. Crypter:(N'oubliez pas de modifier le chemin physique de votre application, ou d'utiliser l'option -app et de donner le nom du répertoire virtuel de l'application !Parce que j'ai utilisé VS sur mon PC, j'ai préféré l'option ci-dessous.Le chemin est le chemin d'accès au fichier Web.config)

    aspnet_regiis -pef "connectionStrings" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

    aspnet_regiis -pef "system.web/membership" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

  7. Pour décrypter (si nécessaire seulement !) :

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla"
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
    
  8. Supprimer le conteneur de clés (si nécessaire seulement !)

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
    
  9. Enregistrez la clé ci-dessus dans un fichier XML afin de l'exporter de votre PC local vers le serveur Web (UAT ou Production)

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
    
  10. Importez le conteneur de clés sur les serveurs WebServer :

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
    
  11. Accorder l'accès à la clé sur le serveur Web

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
    

    Voir dans IIS l'utilisateur ASP.NET ou utiliser :

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
    
  12. Supprimer Accorder l'accès à la clé sur le serveur Web (uniquement si nécessaire !)

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
    
  13. Copiez et collez sur le serveur Web le fichier Web.config crypté.

Donc je l'ai fait fonctionner.

  1. supprimé l'ancien compte d'utilisateur de l'ordinateur portable
  2. réinitialiser app.config pour que la section ne soit pas protégée
  3. fichier de clé supprimé de toutes les clés de machine des utilisateurs
  4. a exécuté l'application et lui a permis de protéger la section

Mais tout cela n’a fait que le faire fonctionner pour cet utilisateur.

MAINTENANT, j'ai besoin de savoir ce que je dois faire pour modifier le code afin de protéger la section afin que plusieurs utilisateurs sur un PC puissent utiliser l'application.Virtual PC me voilà (bien après les vacances à WDW demain jusqu'à mercredi prochain) !

des conseils pour m'aider à m'orienter dans la bonne direction, car je ne suis pas très expérimenté dans ce type de cryptage RSA.

Cela ressemble à un problème d'autorisations.Le (nouvel) utilisateur en question dispose d'autorisations d'écriture sur le fichier app.config ?L'utilisateur précédent était-il un administrateur local ou un utilisateur expérimenté qui aurait pu masquer ce problème ?

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