App.config 接続文字列保護エラー
-
09-06-2019 - |
質問
以前に抱えていた問題に遭遇しています。それを解決する方法に関する参考資料が見つかりません。
ここが問題です。以下のコードを使用して、クライアント アプリケーションの app.config 内の接続文字列セクションを暗号化します。
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
If config.ConnectionStrings.SectionInformation.IsProtected = False Then
config.ConnectionStrings.SectionInformation.ProtectSection(Nothing)
' We must save the changes to the configuration file.'
config.Save(ConfigurationSaveMode.Modified, True)
End If
問題は、営業担当者が退職したことです。古いラップトップが新しい営業担当者に渡され、新しいユーザーのログインでこれを実行しようとすると、エラーが発生します。エラーは次のとおりです。
Unhandled Exception: System.Configuration.ConfigurationErrorsException:
An error occurred executing the configuration section handler for connectionStrings. ---> System.Configuration.ConfigurationErrorsException: Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'.
Error message from the provider: Object already exists.
---> System.Security.Cryptography.CryptographicException: Object already exists
解決 2
私は自分自身に対する最初の答えの中で、よりエレガントな解決策を見つけました。アプリケーションを最初にインストールしたユーザーとしてログインしただけで、構成ファイルの接続文字列が暗号化され、コマンドプロンプトで.netフレームワークディレクトリに移動して実行したかどうかがわかりました。
aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"
これにより、他のユーザーに RSA 暗号化キー コンテナーへのアクセス許可が与えられ、他のユーザーに対しても機能します。
この問題を開発ブログに書いたと思っていたのですが、ここで見つけたので、ここに追加したいと思いました。再度調べる必要がある場合に備えて、ここにあります。このスレッドにも開発ブログ ポイントへのリンクを追加します。
他のヒント
http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603
コピーアンドペースト:D
2007 年 2 月 12 日月曜日、午前 12 時 15 分 by Naica
再:保護された構成を使用した構成ファイルの暗号化
以下は、PC 上の 2 つのセクションを暗号化して Web サーバーに展開するために行ったすべての手順のリストです。たぶんそれは誰かを助けるでしょう...:
マシンレベルの RSA キーコンテナを作成するには
aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
これを web.config の connectionStrings セクションの前に追加します。
<add name="DataProtectionConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="DataProtectionConfigurationProviderKeys" useMachineContainer="true" />
お見逃しなく
<clear />
上から!何度も暗号化・復号化して遊ぶ場合に重要これを Web.Config ファイルの先頭に置くようにチェックします。不足している場合は追加します。
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
VS で Web.Config ファイルを保存して閉じます (非常に重要!)
コマンド プロンプト (ローカル PC) ウィンドウで、次の場所に移動します。
C:\WINNT\Microsoft.NET\フレームワーク\v2.0.50727
暗号化:(アプリの物理パスを変更するか、-app オプションを使用してアプリの仮想ディレクトリの名前を指定することに注意してください。私は PC で VS を使用していたので、以下のオプションを好みました。パスは Web.config ファイルへのパスです)
aspnet_regiis -pef "connectionStrings" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"
aspnet_regiis -pef "system.web/membership" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"
復号化するには (必要な場合のみ!):
aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla" aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
キーコンテナの削除 (必要な場合のみ!)
aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
ローカル PC から Web サーバー (UAT またはプロダクション) にエクスポートするために、上記のキーを XML ファイルに保存します。
aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
キー コンテナを WebServer サーバーにインポートします。
aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
Web サーバー上のキーへのアクセスを許可します。
aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
IIS で ASP.NET ユーザーを参照するか、以下を使用します。
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
Web サーバー上のキーへのアクセスを許可する (必要な場合のみ!) を削除します。
aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
暗号化された Web.config ファイルをコピーして WebServer に貼り付けます。
それで私はそれを機能させました。
- 古いユーザーのアカウントをラップトップから削除しました
- app.config をリセットしてセクションを保護しないようにする
- すべてのユーザーのマシンキーからキーファイルを削除しました
- アプリを実行し、セクションの保護を許可しました
しかし、これはこのユーザーにとって機能するようにするだけでした。
次に、PC 上の複数のユーザーがアプリケーションを使用できるようにセクションを保護するためにコードを変更するにはどうすればよいかを知る必要があります。Virtual PC 来ました (休暇の後、明日から来週の水曜日まで WDW に行きます)!
私はこの RSA 暗号化タイプのものについてはあまり経験がないので、正しい方向に導くのに役立つアドバイスがあれば教えてください。
権限の問題のようですね。問題の(新しい)ユーザーは app.config ファイルへの書き込み権限を持っていますか?以前のユーザーはローカル管理者またはパワー ユーザーだったので、この問題が隠蔽された可能性がありますか?