2011-09-06 6 views
8
コード内の

ConfigurationManage - > section.SectionInformation.ProtectSection()はマシンに依存していますか?

Configuration config = ConfigurationManager.OpenExeConfiguration (Application.ExecutablePath); 
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection; 
if (!section.SectionInformation.IsProtected) 
{ 
    section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); 
} 

アプリケーションを別のマシンに移動すると、何か問題が発生します。

はsection.SectionInformation.ProtectSectionコールマシンに依存します。つまり、設定ファイルをコピーして別のマシンで使用することはできません。

マシンに依存しないプロバイダ(DataProtectionConfigurationProvider以外)がありますか?

私のアプリケーションでは、同じ設定ファイル(フラッシュドライブから実行する必要があります)を持ついくつかのマシン上で動作する必要があります。

ありがとう、 Fábio

答えて

10

は意味が、section.SectionInformation.ProtectSectionコール機種依存ですが、私は、configファイルをコピーして別のマシン上でそれを使用することはできませんか?

はい、それは正しい限りです。 This articleによれば、キーはマシン単位またはユーザー単位で格納されています。

マシンに依存しないプロバイダ(DataProtectionConfigurationProvider以外)がありますか?

ない箱から出して、私は(DataProtectionConfigurationProviderRSAProtectedConfigurationProvider)を知っている2つのプロバイダの両方が同じ「問題」を持っています。私は、RSAプロバイダがキーをマシン間で再利用できるようにするヒントをいくつか見つけましたが、これを達成するための例は見つかりませんでした。

しかし、似たような問題が発生してから昨日自分で必要なものを達成する方法がありました(ネットワーク上の場所からアプリを実行する必要があり、すべてのクライアントが同じものを共有する必要がありました暗号化された設定ファイル)。自分自身をロールバックすることができますProtectedConfigurationProvider。ここでは概念を説明するいくつかのリンクです:これらの記事を使用して

が、私は機械されていない自分のProtectedConfigurationProviderを構築することができましたかUSER-アプリケーションに使用します。私は設定セクションを保護するビルド後のビルドのビルド後のステップを持っているので、保護されたバージョンを展開するだけです。保護されたセクションのデータを取得することは、問題なく他のマシンで期待されるように機能します。もちろん、安全にセクションを暗号化して解読する方法については、非常に注意する必要があります。そこにいくつかの例がありますそれを行う方法の概要を、this私は思うの一つです。

3つの記事のいずれにも明記されていないことの1つは、ASP.netを使用していない場合にアプリをプロバイダに設定する方法です。フラッシュドライブからアプリケーションを実行していると主張しているため、グローバルアセンブリキャッシュにインストールする通常の方法はおそらく動作しません。だから、あなたはこれに類似し、代わりにあなたのapp.configファイルに追加する必要があるだろう:

<?xml version="1.0"?> 
<configuration> 
    ... 
    <configProtectedData defaultProvider="MyEncryptionProvider"> 
    <providers> 
     <add name="MyEncryptionProvider" 
     type="MyAssembly.MyEncryptionProvider, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=whatever_the_assembly_token_is" /> 
    </providers> 
    </configProtectedData> 
    ... 
</configuration> 

暗号化を行いアセンブリはメインアセンブリと同じパスにある場合、これは動作するはずです。私は署名されたアセンブリを使用しています、sn -T {Assembly}はあなたに設定ファイルに入力する必要があるPublicKeyTokenを与えます。セクションの保護

は、その後これに類似行われます

using System.Configuration; 

... 

Configuration oConfiguration = ConfigurationManager.OpenExeConfiguration(yourExePath); 
oSection.SectionInformation.ProtectSection("MyEncryptionProvider"); 
oSection.SectionInformation.ForceSave = true; 
oConfiguration.Save(); 

私は今日それをテストし、それが開発マシン(XP SP3)で暗号化された設定ファイルで働いていた、とXP SP2上で使用されています、Win7 32ビットおよびWin7 64ビット。

免責

  • あなたのアセンブリに署名しない場合は、このいずれかが動作するかどうかわかりません。
  • ご自身の責任で使用してください。私はどの標準のセキュリティの専門家でもありません。
+0

Takrl、それは素晴らしいです。どうもありがとうございました。私はそれがどのように進むのかを知らせます。 – Fabio

+0

@Fabioあなたが何か問題がある場合は、私に知らせてください... – takrl

+0

こんにちは、私は私のカスタムプロテクト設定プロバイダで設定を暗号化するのに問題があります。 section.SectionInformation.ProtectSection( "AesProvider")を呼び出すと、 "保護プロバイダ 'AesProvider'が見つかりませんでした。 ProtectedConfiguration.Providersを使用するとロードされますが、他の設定ファイルを暗号化するために使用できないプログラムの設定が使用されているようです。このような経験はありますか? – flynhigh

関連する問題