3

以前に抱えていた問題に直面しています。それを解決する方法についての私の参照が見つかりません。

これが問題です。以下のコードを使用して、クライアント アプリケーションの 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
4

4 に答える 4

2

http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603

コピー&ペースト:D

2007 年 2 月 12 日月曜日 午前 12 時 15 分 Naica によって

re: 保護された構成を使用して構成ファイルを暗号化する

PC で 2 つのセクションを暗号化し、それを WebServer に展開するために行ったすべての手順のリストを次に示します。多分それは誰かを助けるでしょう...:

  1. マシンレベルの RSA キー コンテナーを作成するには

    aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
    
  2. これを 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 />!何度も暗号化・復号化して遊ぶ場合に重要

  3. これが Web.Config ファイルの先頭にあることを確認します。不足している場合は追加します。

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    
  4. VS で Web.Config ファイルを保存して閉じます (非常に重要です)。

  5. コマンド プロンプト (ローカル PC) ウィンドウで、次の場所に移動します。

    C:\WINNT\Microsoft.NET\Framework\v2.0.50727

  6. 暗号化: (アプリの物理パスを変更するか、-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"

  7. 復号化するには (必要な場合のみ!):

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla"
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
    
  8. キー コンテナーを削除します (必要な場合のみ!)

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
    
  9. 上記のキーを xml ファイルに保存して、ローカル PC から Web サーバー (UAT または実稼働) にエクスポートします。

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
    
  10. キー コンテナーを WebServer サーバーにインポートします。

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
    
  11. Web サーバー上のキーへのアクセスを許可する

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
    

    IIS で ASP.NET ユーザーを確認するか、次を使用します。

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
    
  12. Web サーバー上のキーへのアクセスを許可する (必要な場合のみ!) を削除します。

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
    
  13. 暗号化された Web.config ファイルをコピーして WebServer に貼り付けます。

于 2010-04-23T22:18:51.077 に答える
1

だから私はそれを機能させました。

  1. ラップトップから古いユーザー アカウントを削除しました
  2. app.config をリセットしてセクションを保護しないようにする
  3. すべてのユーザーのマシン キーからキー ファイルを削除しました
  4. アプリを実行し、セクションを保護できるようにしました

しかし、これが行ったことは、このユーザーに対して機能させることだけでした。

ここで、PC 上の複数のユーザーがアプリケーションを使用できるように、コードを変更してセクションを保護するために何をしなければならないかを知る必要があります。ここに仮想 PC が来ました (WDW への休暇の後、明日から次の水曜日まで)!

私はこのRSA暗号化タイプの経験があまりないので、私を正しい方向に向けるのに役立つアドバイス。

于 2008-09-03T17:55:15.960 に答える
1

私は自分自身への最初の答えでよりエレガントな解決策を見つけました。最初にアプリケーションをインストールしたユーザーとしてログインし、構成ファイルの接続文字列を暗号化して、コマンド プロンプトで .net フレームワーク ディレクトリに移動し、実行したかどうかを確認しました。

aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"

他のユーザーに RSA 暗号化キー コンテナーへのアクセス許可を与えると、他のユーザーに対して機能します。

この問題を開発者ブログに投稿したと思っていたのですが、ここで見つけたので、ここに追加したかったので、もう一度調べる必要がある場合はここにあります。このスレッドにも開発ブログ ポイントへのリンクを追加します。

于 2008-12-16T23:50:52.030 に答える
0

権限の問題のように聞こえます。問題の (新しい) ユーザーは、app.config ファイルへの書き込み権限を持っていますか? 以前のユーザーは、この問題を隠した可能性のあるローカル管理者またはパワー ユーザーでしたか?

于 2008-09-03T17:51:49.870 に答える