2008-09-03 10 views
2

Je suis confronté à un problème que j'avais auparavant; ne trouve pas ma référence sur la façon de le résoudre.App.config chaîne de connexion Erreur de protection

Voici le problème. Nous chiffrons pour notre code en utilisant l'application client sous la section chaînes de connexion dans le app.config:

 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 

La question est que nous avions un congé de vendeur. L'ancien ordinateur portable va à un nouveau vendeur et sous la connexion du nouvel utilisateur, quand 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 
+2

Si vous utilisez Vista ou une version supérieure, assurez-vous que vous exécutez en tant qu'administrateur. –

Répondre

1

J'ai trouvé une solution plus élégante que dans ma réponse originale à moi-même. J'ai trouvé si je viens ouvert une session comme e Euser qui réservation initiale a installé l'application et a provoqué la connectionStrings de fichier de configuration à chiffrer et aller dans le répertoire framework .NET dans une invite commadn et exécuter

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

lui a donné l'autre utilisateur l'autorisation d'accéder au conteneur de clé de chiffrement RSA et il fonctionne ensuite pour les autres utilisateurs. Je voulais juste l'ajouter ici car je pensais que j'avais blogué ce problème sur notre blog de développement, mais l'ai trouvé ici, donc au cas où je devrais le chercher à nouveau, il sera ici. Va ajouter un lien vers notre blog sur ce sujet.

+0

Cela aide également lorsque obtenir cette erreur à partir d'une application ASP .NET. aspnet_Regiis -pa "NetFrameworkConfigurationKey ASPNET Merci – Jay

0

Cela ressemble à un problème d'autorisations. Le (nouvel) utilisateur en question a-t-il des 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?

+0

nous avions installé l'application pour un nouvel utilisateur, en utilisant l'installation de clickonce. les deux utilisateurs étaient dans le groupe d'administration sur le PC. d'après ce que j'ai trouvé en ligne, il semble que la clé RSA par défaut soit spécifique à la machine et que lorsque différents utilisateurs l'utilisent pour protéger leur version de l'appl.config, cela provoque des erreurs. Je pense que je dois protéger en utilisant une clé spécifique à l'utilisateur, maintenant juste besoin de savoir comment. :) Merci d'avoir répondu! Mike – MikeScott8

1

J'ai donc réussi à le faire fonctionner.

  1. anciens utilisateurs enlevés compte de portable
  2. reset app.config à avoir une section non protégée
  3. fichier clé retirée de toutes les clés de la machine des utilisateurs
  4. RAN application et permis de protéger la section

Mais tout cela a été de le faire fonctionner pour cet utilisateur.

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

tout conseil pour m'aider dans la bonne direction, car je ne suis pas très expérimenté dans ce type de chiffrement RSA.

1

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

copier et coller: D

lundi, 12 Février, 2007 00:15 par Naica

re: Encrypting fichiers de configuration en utilisant la configuration protégée

Voici une liste de toutes les étapes que j'ai faites pour crypter deux sections sur mon PC et ensuite le déployer sur le WebServer. Peut-être que ça va aider quelqu'un ...:

  1. Pour créer une machine à niveau conteneur de clés RSA

    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 la <clear /> d'en haut! Important lors de la lecture de nombreuses opérations de codage/décryptage

  3. Cochez cette option en haut du fichier Web.Config. Si elle est manquante ajouter:

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    
  4. Enregistrer et fermer fichier web.config dans VS fenêtre (très important!)

  5. Dans l'invite de commandes (mon PC local) aller à:

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

  6. Crypter: (Attention au changement chemin phisical pour votre application, ou utilisez -app option et donne le nom o répertoire virtuel pour 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 vers le fichier web.config)

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

    aspnet_regiis -pef "system.web/adhésion" "c: \ Bla \ Bla \ Bla" -prov "DataProtectionConfigurationProvider"

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

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla" 
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla" 
    
  8. Delete Container

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys" 
    
  9. Enregistrer la clé ci-dessus pour le fichier xml pour exporter à partir de votre PC local au serveur web (UAT ou production)

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri 
    
  10. Importer le conteneur de clé 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'ASP.utilisateur NET ou de l'utilisation:

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

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User" 
    
  13. Copier et Coller pour ServeurWEB le fichier web.config crypté.