Jak zaszyfrować jeden wpis w sieci.config
ASP.NET 4
Użyłem szyfrowania klucza RSA dla ciągów połączeń w sieci.config on my web farm. Jest jednak jeszcze jeden niestandardowy wpis hasła, który chciałbym zaszyfrować. Jak należy zaszyfrować go za pomocą klucza RSA bez szyfrowania reszty konfiguracji. Proszę o radę, dzięki.
Przykład:
<appSettings>
...
<add key="Host" value="www.foo.com" />
<add key="Token" value="qwerqwre" />
<add key="AccountId" value="123" />
<add key="DepartmentId" value="456" />
<add key="Password" value="asdfasdf" />
<add key="SessionEmail" value="[email protected]" />
<add key="DefaultFolder" value="789" />
</appSettings>
3 answers
Możesz umieścić hasło w osobnej sekcji i zaszyfrować tylko tę sekcję. Na przykład:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="secureAppSettings" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<appSettings>
<add key="Host" value="www.foo.com" />
<add key="Token" value="qwerqwre" />
<add key="AccountId" value="123" />
<add key="DepartmentId" value="456" />
<add key="SessionEmail" value="[email protected]" />
<add key="DefaultFolder" value="789" />
</appSettings>
<secureAppSettings>
<add key="Password" value="asdfasdf" />
</secureAppSettings>
</configuration>
A następnie (zauważ, że w moim przykładzie używam DPAPI, więc dostosuj dostawcę do RSA):
aspnet_regiis -pef secureAppSettings . -prov DataProtectionConfigurationProvider
Po zaszyfrowaniu plik będzie wyglądał tak:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="secureAppSettings" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<appSettings>
<add key="Host" value="www.foo.com" />
<add key="Token" value="qwerqwre" />
<add key="AccountId" value="123" />
<add key="DepartmentId" value="456" />
<add key="SessionEmail" value="[email protected]" />
<add key="DefaultFolder" value="789" />
</appSettings>
<secureAppSettings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd.......</CipherValue>
</CipherData>
</EncryptedData>
</secureAppSettings>
</configuration>
Sposób, w jaki uzyskasz dostęp do tych ustawień w aplikacji po zaszyfrowaniu pliku, jest nadal taki sam i całkowicie przejrzysty:
var host = ConfigurationManager.AppSettings["Host"];
var password = ConfigurationManager.AppSettings["Password"];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-03 08:39:26
W c# i. Net 4.5 musiałem użyć tego, aby odczytać ustawienie zaszyfrowane:
string password = ((System.Collections.Specialized.NameValueCollection)ConfigurationManager.GetSection("secureAppSettings"))["Password"];
Ale poza tym działa smakołyk.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-29 14:59:42
Nie można zaszyfrować pojedynczego wpisu - infrastruktura pozwala tylko na szyfrowanie całych sekcji konfiguracyjnych.
Jedną z opcji jest umieszczenie wpisu we własnej sekcji konfiguracyjnej i zaszyfrowanie go.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-03 08:30:55