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>
Author: Stan, 2011-06-03

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"];
 62
Author: Darin Dimitrov,
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.

 13
Author: user2993145,
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.

 8
Author: Oded,
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