2

私は暗号化プロセスに不慣れで、暗号化された web.config ファイルをホスティング会社のサーバーにインストールしようとして失敗しました。Microsoft Visual Web Developer 2010 Express を使用しています。

「チュートリアル: Protected を使用した構成情報の暗号化」にある手順を数回実行しました。

ウォークスルーに関して注意してください。web.config ファイルに machineKeys がないため、その暗号化手順をスキップしました。

aspnet_regiis -pef connectionStrings "c:\Users......\mywebsite.com"を実行すると、次の
ように返されます: Encrypting configuration section ... 成功しました!

2) 次に、web.config ファイルを FTP で送信すると、サイトに次のエラーが表示されます: 注: 行 8 が強調表示されています)

「/」アプリケーションでサーバー エラーが発生しました。

構成エラーの説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下の特定のエラーの詳細を確認し、構成ファイルを適切に変更してください。

パーサー エラー メッセージ: プロバイダー 'RsaProtectedConfigurationProvider' を使用して復号化できませんでした。プロバイダーからのエラー メッセージ: データが正しくありません。

ソース エラー:

6行目: 7行目: 8行目: 10行目:

ソース ファイル: C:\HostingSpaces*username**mywebsite.com*\wwwroot\web.config 行: 8


バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.1


欠落している部分があるに違いないことはわかっていますが、検索しても何も見つかりませんでした。Web サイトの暗号化に関して何かする必要があるかどうかを確認するために、ホスティング会社にメールを送信しましたが、まだ応答がありません。

私が期待するのは、暗号化された値を受け取り、アルゴリズムを使用してそれを復号化するキーが別の場所に存在することです。もしそうなら、どこでその鍵を手に入れ、どこに行くのでしょうか。

どんな助けでも大歓迎です.Web上でこれに似た問題を見つけることができないことに少し驚いています.

どうもありがとう。

4

2 に答える 2

3

私はあなたの質問に直接答えることはできませんが、web.configを暗号化する簡単なテクニックがあります。それは最善の方法ではないかもしれませんが、始めるには十分かもしれません。この手法は、アプリケーションの起動時にweb.configを暗号化します。

非常に重要:このコードが本番環境でのみ実行されることを確認してください。開発中に実行すると、ソースweb.configが暗号化され、元に戻すことができなくなります。

   private static void EncryptConfig() {
        System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(HostingEnvironment.ApplicationVirtualPath);

        foreach (string sectionName in new[] { "connectionStrings", "appSettings" }) {
            ConfigurationSection section = config.GetSection(sectionName);
            if (!section.SectionInformation.IsProtected) {
                section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
            }
        }

        config.Save();
    }

その後、Application_Start()でこのメソッドを呼び出すことができます

protected void Application_Start() {
            if (IsProduction) {
                EncryptConfig();
            }
}

web.configを運用サーバーにデプロイすると暗号化されないため、このソリューションは完全ではありません。暗号化は実行時に行われるため、アプリケーションの起動後にのみ暗号化されます。最初のリクエストが届くと、web.configが暗号化されます。2番目の要求が着信すると、asp.netがweb.configが変更されたことを検出するため、アプリを再起動する必要があります。そして、その時点から、アプリは暗号化されたweb.configで正常に動作します。この手法の利点は、暗号化が自動的に行われることです。新しいweb.configファイルをデプロイするたびに、起動時に自動的に暗号化されます。

重要:ソースweb.configを暗号化しないように、EncryptConfig()が本番環境でのみ実行されることを確認してください。

于 2011-04-09T04:08:13.150 に答える
2

ジョニーO-ありがとう。これはとても簡単に機能しました。CP

global.asaxファイルを追加しました。これが、このファイル(global.asax.cs)に含まれるコードスニペットです。

確かに、これの多くは上から複製されていますが、それは私の全体的な解決策です。再度、感謝します。

using System.Web.Configuration;
using System.Configuration;
using System.Web.Hosting;

    protected void Application_Start(object sender, EventArgs e)
    {
        //Test to see if this app is being started on the development machine (e.g. in the debugger)
        //This code will encript web.config the first time this program runs.
        //Therefore, it is important to have a backup copy of the non-encrypted web.config as this
        //code below will encrypt it, which is what we want to happen on the production server.            
        if (! System.Diagnostics.Debugger.IsAttached )
        {
            EncryptConfig();  //See below
        }
    }



    /// <summary>
    /// This technique of encrypting the web.config file was learned from this forum post:
    /// http://stackoverflow.com/questions/5602630/encrypting-web-config-and-installing
    /// </summary>
    private static void EncryptConfig()
    {
        System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(HostingEnvironment.ApplicationVirtualPath);

        foreach (string sectionName in new[] { "connectionStrings", "appSettings" })
        {
            ConfigurationSection section = config.GetSection(sectionName);
            if (!section.SectionInformation.IsProtected)
            {
                section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
            }
        }

        config.Save();
    }
于 2012-02-22T19:53:07.427 に答える