2009-03-23 15 views
5

Mam aplikację, która szyfruje sekcję w pliku konfiguracyjnym. W raz pierwszy, że staram się odczytać zaszyfrowaną sekcji z pliku konfiguracyjnego pojawia się komunikat o błędzie „atrybutu Nierozpoznany«configProtectionProvider»Zauważ, że nazwy atrybutów są wrażliwe na wielkość liter.”App.config - błąd zaszyfrowanej sekcji:

config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
// Get the section in the file. 
ConfigurationSection section = config.GetSection("EncryptedSection"); 


if (section != null)  
{   
    // Protect the section. 
    section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider"); 
    section.SectionInformation.ForceSave = true; 

    // Save the change. 

    config.Save(ConfigurationSaveMode.Modified); 
} 
ConfigurationManager.RefreshSection("EncryptedSection"); 
Properties.Settings.Default.Reset(); 

//This is the part where I read the encrypted section: 

ConfigurationManager.RefreshSection("EncryptedSection"); 
System.Collections.IDictionary HSMMasterKeyConfig = (System.Collections.IDictionary)System.Configuration.ConfigurationManager.GetSection("EncryptedSection"); 

Dzieje się tak tylko w po raz pierwszy próbuję przeczytać zaszyfrowaną sekcję. Zauważyłem, że plik .config jest aktualizowany natychmiast po pierwszym zapisaniu, ale z jakiegoś powodu muszę ponownie uruchomić aplikację, aby skorzystać z zaszyfrowanej sekcji.

+0

Hum, modyfikowanie plików konfiguracyjnych w środowisku wykonawczym nie jest typowym zastosowaniem. Powinieneś być może zgłosić problem w Microsoft Connect. –

Odpowiedz

1

Dla Twojego pytania chodziło o to, że proces, który próbował zaszyfrować sekcję konfiguracji, nie miał uprawnień administratora. Dodałem ten proces do grupy administratorów i to rozwiązało.

2

Najlepszym sposobem na to będzie do zaszyfrowania sekcje app.config tylko podczas instalacji. Dodaj klasę instalatora do swojego projektu i nadpisaj metodę Install w klasie. W tej metodzie należy wykonać szyfrowanie. Musisz wywołać polecenie base.Install na końcu nadpisanej metody instalacji. W Setup Project goto Custom Actions i zlokalizuj niestandardowe działanie Install, które będzie wskazywane przez Twój wynik wyjściowy [exe lub assembly], który zawiera definicję implementacji klasy Installer. W ten sposób zaszyfruje swoje app.Config sekcje podczas instalacji prosto i nie będziesz musiał stawić czoła temu problemowi. Aplikacja automatycznie użyje dostawcy DPAPI do odczytu/zapisu poprzez sekcje lub ustawienia.

Mam nadzieję, że to pomoże.

Dzięki.

Ruchit S.

+0

+1 dobra sugestia. Oto przykład: http://www.codeproject.com/KB/security/ProtectedConfigWinApps.aspx – JohnB

0

spróbuj uruchomić swój Exe w oddzielnym Application Domain. Po załadowaniu aplikacji w nowej AppDomain sprawdź, czy sekcje są zaszyfrowane, czy nie. Jeśli nie, zaszyfruj sekcję i uruchom AppDomain, aby ponownie pobrać i ponownie wczytać plik wykonywalny.

1

Po prostu wpadłem dziś na ten sam problem. Zwykle za każdym razem, gdy uruchamiam aplikację, w której konfiguracja jest zaszyfrowana, zawsze sprawdzam konfigurację przy starcie, aby ustalić, czy jest ona chroniona. Jeśli nie to podążam za standardową metodą SectionInformation.ProtectSection. Jest to zawsze mój pierwszy krok, ale dzisiaj z jakiegoś powodu postanowiłem odwołać się do czegoś z konfiguracji zanim wykonałem moją kontrolę ochrony i otrzymałem "Nierozpoznany atrybut" configProtectionProvider. "Zauważ, że w nazwach atrybutów rozróżniana jest wielkość liter." Error. Wszystko, co musisz zrobić, to uruchomić kod ochrony, zanim odwołasz się do konfiguracji w ramach normalnego kodu i nie będziesz już mieć błędu.

Powiązane problemy