web-dev-qa-db-ja.com

web.configの1つのエントリを暗号化する方法

ASP.NET 4

Webファームのweb.configの接続文字列に RSAキー暗号化 を使用しました。ただし、暗号化するカスタムパスワードエントリがもう1つあります。残りの構成を暗号化せずにRSAキーで暗号化するにはどうすればよいですか。アドバイスしてください、ありがとう。

例:

  <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>
40
Stan

パスワードを別のセクションに入れて、このセクションのみを暗号化できます。例えば:

<?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>

次に(この例ではDPAPIを使用しているため、プロバイダーをRSAに適応させることに注意してください):

aspnet_regiis -pef secureAppSettings . -prov DataProtectionConfigurationProvider

暗号化されると、ファイルは次のようになります。

<?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>

ファイルが暗号化された後にアプリケーションでこれらの設定にアクセスする方法は、同じであり、完全に透過的です。

var Host = ConfigurationManager.AppSettings["Host"];
var password = ConfigurationManager.AppSettings["Password"];
61
Darin Dimitrov

C#および.Net 4.5では、これを使用して暗号化された設定を読み取る必要がありました。

string password = ((System.Collections.Specialized.NameValueCollection)ConfigurationManager.GetSection("secureAppSettings"))["Password"].ToString();

それ以外はおやつになります。

13
user2993145

単一のエントリを暗号化することはできません-インフラストラクチャでは、構成セクション全体の暗号化のみが許可されます。

1つのオプションは、独自の構成セクションにエントリを配置し、それを暗号化することです。

7
Oded