Avatar billede gonnemand Nybegynder
10. juni 2009 - 08:51

Problem med krypteret del af app.exe.config filen

Jeg har lavet et program til at kører nogle forskellige "nat-kørsler" vha. Task Scheduler (Server 2008)

Programmet bruger username og password til bl.a. mapninger, og da password ændres hver tredje måned, er det oplagt at have user/pass i config filen.

Jeg har så lavet følgende i app.exe.config filen:

<secureAppSettings>
  <add key="userName" value="some_username"/>
  <add key="password" value="some_password"/>
</secureAppSettings>

Dette er vældig fint og fungere. Men det er ønskeligt at kryptere secureAppSettings, så derfor bliver følgende kode eksekveret som noget af det første i programmet:
###### CODE START ######
try
{
  Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  ConfigurationSection section = config.GetSection("secureAppSettings");

  if (section != null && !section.SectionInformation.IsProtected)
  {
    section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
    config.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection("configuration");     
  }
  else
  {
    log.Info("userName and password is encrypted.");
  }
}
catch (Exception encryptException)
{
  // Do something
}
###### CODE END ######

Til at starte med er secureAppSettings selvfølgelig ikke krypteret, så derfor kryptere ovenstående kode secureAppSettings.
Resultatet af den krypteret secureAppSettings-del er:

  <secureAppSettings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAEhCLMipFcE+SuuW5KN59wwQAAAACAAAAAAADZgAAqAAAABAAAAA5CZUt9SJf7xbd1efGvz3YAAAAAASAAACgAAAAEAAAAK3IFyI7MH3qBDL3jtaRd04gAQAA5BiaoiOUNwF/EZBwvtHepE+OltNGxDJ4s+zbs+nkURFVxF39uASxoGgdTiH/FAvSba2tJHpGfp834yzG74AudNm6DAfcU7n6pcBQL2OHHSNXzTyoCIk5ndrRu9FnYpJEtf+bfHnSeQNl1sKDXCdBOHK/+GZLhCK2Dfxgegs596ObfYT4uFsvbFGlS6cyzh5kcTVnIVGY8KVfqJ/ojURuiZcxeI+8srue8LbsL6EuaOleVWad6HP3CZgra8U03JWSKY1O2RJi84tMkfKJztas9g7kUJr5/djSsAfTUuaywEyPVmhetjR3fJWgec9+Jwzdf47e+eRLPzgL9HwXLTHwlrUMmSwkRnbuwrnwsOjF3Dbfc7wzDhSV6zzAY3aUcLDwFAAAAHZI6vnuAn74lPNEiHhXu+YjFmp3</CipherValue>
      </CipherData>
    </EncryptedData>
  </secureAppSettings>

På et senere tidspunkt i kode eksekveringen, skal jeg jo så have fat i user/pass fra config filen.
Dette gør jeg med følgende kode:

###### CODE START ######
secureAppSettings = (NameValueCollection)ConfigurationManager.GetSection("secureAppSettings");
userName = secureAppSettings["userName"];
password = secureAppSettings["password"];
###### CODE END ######

HVIS secureAppSettings IKKE var krypteret, bliver det krypteret og så virker ovenstående kode ikke. Jeg får fejlen:
System.Configuration.ConfigurationErrorsException: Unrecognized attribute 'configProtectionProvider'.

MEN, hvis jeg stopper programmet og starter det igen, hvor secureAppSettings nu ER krypteret, fungere det 100%.

For mig at se, er der tale om en eller anden manglende opdatering. For det er altså lidt underligt at det ikke virker lige efter secureAppSettings er blevet krypteret, men virker fint ved genstart af programmet. Jeg må mangle et eller andet.

En config-"specialist" ;-P der kan hjælpe?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester