web-dev-qa-db-ja.com

app.configの接続文字列を暗号化する

App.configで接続文字列の暗号化に問題があります。 app.configのconnectionStringsセクションを保護するコードがありますが、パスワードはプレーンテキストで表示されたままです。

接続文字列を暗号化して、展開時にプレーンテキストではないようにする必要があります。 web.configについてはSOでよく似た質問がありますが、app.configではありません。

42
Blade3

この記事 をご覧ください。非常に便利な例があります。あなたは基本的にここであなたを助けるためにSystem.Configuration.SectionInformation.ProtectSectionを探しています。

保護された構成の実装

23
John Mitchell

App.configの名前をweb.configに変更し、aspnet_regiisツールで暗号化してからapp.configに名前を変更するだけで、web.configと同じソリューションを簡単に適用できます。

  1. App.configの名前をweb.configに変更します
  2. コマンドプロンプトを開き、次を入力します。
    %windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" c:\<folder containing your web.config>(フォルダーレベルで停止し、末尾の「\」を入れないでください)
  3. web.configの名前をapp.configに戻します

これをメモ帳で開いて、暗号化されたファイルを表示できます。 Visual Studioでは、復号化されていることがわかります。接続文字列は、暗号化されていない場合と同じ方法で使用できます。

50
benoit

configファイルの場所を定義する

Configuration config  = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

connectionStringsを暗号化する場合

config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);

アプリの設定部分に注意する必要があります

AppSettingsを暗号化する場合

config.AppSettings.SectionInformation.ProtectSection(Nothing);

enter image description here

3
Salem Ahmed

これを自動化する方法:

ProjectSettings>コンパイル> BuildEvents>ビルド後の編集

以下のコードを貼り付けます:

SET ApplicationName=YourAppWithoutExtention
echo.
echo POST BUILD ACTIONS
echo ====================

if EXIST web.config (
    echo Deleting web.config
    DEL web.config
)

echo Renaming %ApplicationName%.exe.config to web.config
REN %ApplicationName%.exe.config web.config

echo Running aspnet_regis against webconfig
SET rpath=%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "$(TargetDir)
SET rpath=%rpath:~0,-1%"
echo Path: %rpath%
%rpath%

echo Renaming web.config to %ApplicationName%.exe.config 
REN web.config %ApplicationName%.exe.config

echo Done.

「YourAppWithoutExtention」をアプリ名に置き換えます。

その後、ビルドするたびにapp.configが自動的に暗号化されます。

2
stigzler

App.config file to web.config<br>の名前を変更します。•管理者としてコマンドプロンプトを実行します。

encryptの場合:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings"引用符で囲まれたプロジェクトの場所と-prov "DataProtectionConfigurationProvider"

例:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "D:\location\location1\location" -prov "DataProtectionConfigurationProvider" 

復号化の場合:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings"引用符内のプロジェクトの場所。

例:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "D:\location1\location" 

エラーの場合:

これを構成xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0"に追加します

このような:

enter image description here

•最後に、web.configの名前をApp.Configに変更します

2

さらに、webファームで接続文字列を暗号化および復号化したい人がいる場合の手順は次のとおりです。

  1. RSAキーを作成します:aspnet_regiis -pc "MyKeys" -exp

  2. このキーへのアプリケーションプールIDのアクセスを許可:aspnet_regiis -pa "MyKeys" "IIS AppPool\ApplicationPoolName" -full

  3. RSAプロバイダーをweb.configに追加します:<configuration> <configProtectedData> <providers> <add name="MyProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="MyKeys" useMachineContainer="true" /> </providers> </configProtectedData> </configuration>

  4. RSAプロバイダーを使用してweb.configを暗号化します:aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider"注:単一サーバーのシナリオで行ったような代替構文を使用できます。例:ASPNET_REGIIS -pef "connectionStrings" "D:\inetpub\wwwroot\applicationFolder" -prov "MyProvider"

  5. Web.configを開き、接続文字列が暗号化されていることを確認します
  6. サイトをテストし、機能していることを確認します
  7. Web.configの暗号化を解除してください。以下のコードを含むtest.aspxファイルを作成します。参照して復号化されたファイルを確認します
  8. RSAキーをCドライブにエクスポートします:aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri
  9. このファイルをWebファームの2番目のサーバーにコピーします
  10. そのサーバーにインポートします:aspnet_regiis -pi "MyKeys" "c:\keys.xml"
  11. このキーへのアクセスを許可します(ステップ2と同じ)
  12. 2番目のサーバーでアプリケーションをテストする

ソース: 接続文字列を暗号化および復号化する方法

0
Ned