セキュリティ保護された ASP.NET アプリケーションの構築 : 認証、認定、および通信のセキュリティ保護 ASP.NET と Enterprise Services から DPAPI (ユーザー ストア) を使用する方法
J.D. Meier, Alex Mackman, Michael Dunner, and Srinath Vasireddy
Microsoft Corporation
November 2002
日本語版最終更新日 2003 年 3 月 17 日
適用対象:
Microsoft® ASP.NET
Microsoft Visual Studio® .NET
Microsoft Windows® 2000
全体の概要については、「セキュリティ保護された ASP.NET アプリケーションの構築」の開始ページを参照してください。
要約 : ここでは、ASP.NET の Web アプリケーションまたは Web サービスから DPAPI を使用して機密データを暗号化する方法について説明します。また、ユーザー ストアで DPAPI を使用する方法について説明しますが、この場合は、アウト プロセスの Enterprise Services コンポーネントが必要になります。
目次
メモ
Enterprise Services を使う理由
Windows サービスを使う理由
必要条件
要約
参考資料
Web アプリケーションでは、データベースの接続文字列やサービス アカウントの資格情報など、機密扱いのデータをアプリケーション構成ファイルに記述しなければならないことがあります。セキュリティ上の観点から、この種のデータはプレーン テキストで格納せずに、暗号化した状態で格納する必要があります。
ここでは、ASP.NET と Enterprise Services から DPAPI (Data Protection API) を使用する方法について説明します。
メモ
- DPAPI は、コンピュータ ストアまたはユーザー ストアで使用できます。ユーザー ストアの場合は、ユーザー プロファイルが読み込まれている必要があります。既定では、ユーザー ストアが使われます。コンピュータ ストアを使用するには、DPAPI 関数に CRYPTPROTECT_LOCAL_MACHINE フラグを渡します。
- ここで説明するユーザー ストアの場合は、機密データにアクセスできるユーザーを制限できるので、より強固なセキュリティが提供されます。データを暗号化したユーザーのみがそのデータを解読できます。ただし、ASP.NET Web アプリケーションからユーザー ストア ベースで DPAPI を使用する場合は、ユーザー プロファイルの読み込みとその解除を実行するコードを別途作成する必要があります。ASP.NET には、自動的にユーザー プロファイルを読み込むしくみがないためです。
- ASP.NET Web アプリケーションからコンピュータ ストアで DPAPI を使用する方法については、このガイドの「パート IV : 参照」の「ASP.NET から DPAPI (コンピュータ ストア) を使用する方法」を参照してください。コンピュータ ストアで DPAPI を使用する場合、Enterprise Services アプリケーションは必要ありません。
ここで説明する手順では、Enterprise Services (COM+) サーバー アプリケーション内で実行する .NET サービス コンポーネントを使用して DPAPI の処理を行います。その理由は、後の「Enterprise Services を使う理由」に説明しているとおりです。同様に、「Windows サービスを使う理由」で説明する理由のため、Windows サービスを使用します。このソリューションの構成を、図 1 に示します。
図 1 DPAPI との対話のために Enterprise Services サーバー アプリケーション内のサービス コンポーネントを使用する ASP.NET Web アプリケーションの構成図
図 1 の処理の流れは、次のとおりです。
- Windows SCM (Service Control Manager) が Win32 サービスを起動します。このサービスの実行用アカウントと関連付けられているユーザー プロファイルが自動的に読み込まれます。Enterprise Services アプリケーションの実行には、この同じ Windows アカウントが使われます。
- Win32 サービスがサービス コンポーネントの Launch メソッドを呼び出します。Enterprise Services アプリケーションが起動し、サービス コンポーネントが読み込まれます。
- Web アプリケーションが Web.config ファイルから暗号化された文字列を取り出します。
- Web アプリケーションが暗号化された文字列を解読するため、サービス コンポーネントのメソッドを呼び出します。
- サービス コンポーネントが Win32 DPAPI の関数を呼び出す P/Invoke を通じて DPAPI と対話します。
- 解読された文字列が Web アプリケーションに返されます。
Enterprise Services を使う理由
DPAPI では、暗号化キーの生成に Windows アカウントのパスワードを使用します。DPAPI が使用するアカウントは、現在のスレッド トークンかプロセス トークンから取得されます。DPAPI を呼び出すスレッドが現在偽装中の場合は、現在のスレッド トークンが使われます。また、ユーザー ストアで DPAPI を使用する場合は、アカウントのユーザー プロファイルが読み込まれている必要があります。この制約のため、ユーザー ストアで DPAPI を使用する ASP.NET Web アプリケーションでは、次のような問題が生じます。
- 既定の ASPNET アカウントで実行している ASP.NET アプリケーションから DPAPI を呼び出すと、呼び出しは失敗します。ASPNET アカウントの場合は、ユーザー プロファイルが読み込まれないためです。
- ASP.NET Web アプリケーションがその呼び出し元を偽装するよう構成されている場合、ASP.NET アプリケーションのスレッドには、スレッド偽装トークンが関連付けられます。この偽装トークンのログオン セッションは、ネットワーク ログオン セッションとなります。これは、呼び出し元を表すためにサーバーで使われます。ネットワーク ログオン セッションの場合、ユーザー プロファイルは読み込まれません。また、サーバーは偽装されたユーザーのパスワードを参照できないので、パスワードから暗号化キーを生成することもできません。ただし、アプリケーションが基本認証を使用している場合はこの限りではありません。
固定プロセス ID による Enterprise Services サーバー アプリケーション内で、DPAPI にアクセスして暗号化と解読を処理するサービス コンポーネントを作成することによって、これらの問題は解決できます。
Windows サービスを使う理由
ここでは、ユーザー プロファイルを自動的に読み込ませるための方法として Windows サービスを使用します。Windows SCM (Service Control Manager) によりサービスが起動されると、そのサービスの実行に使われるアカウントのプロファイルが読み込まれます。
このサービスによりサービス コンポーネントを読み込むことができ、続けて Dllhost.exe のインスタンスで Enterprise Services サーバー アプリケーションを起動できます。
Windows サービスとサービス コンポーネントはどちらも同じアカウント (必要最低限の特権を持ったアカウント) を使用して実行するため、サービス コンポーネントは、読み込まれたユーザー プロファイルにアクセスすることができ、DPAPI の関数を呼び出してデータの暗号化と解読を実行できます。
サービス コンポーネントが Windows サービスから起動されなかった場合 (サービスが関与しない場合)、ユーザー プロファイルは自動的には読み込まれません。ユーザー プロファイルを読み込むための Win32 API (LoadUserProfile) は存在しますが、これを呼び出すコードは Administrators グループに所属している必要があり、アカウントには必要最低限の特権のみを与えるという原則に反することになります。
サービス コンポーネントの Encrypt メソッドまたは Decrypt メソッドが呼び出されるときは、必ずサービスが実行していなければなりません。Windows サービスを停止すると、ユーザー プロファイルも自動的に読み込みが解除されます。Windows サービスが停止した時点で、サービス コンポーネントの DPAPI 関連メソッドは機能しなくなります。
必要条件
ハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、スキル、知識、サービス パックの要件は、以下のとおりです。
- Microsoft SQL Server 2000 または Microsoft Windows XP オペレーティング・システム
- Microsoft Visual Studio .NET 開発システム
また、Microsoft Visual C#® 開発ツールを使用した ASP.NET Web 開発に関する知識も必要です。
要約
ここでは、次の手順について説明します。
- Encrypt メソッドと Decrypt メソッドを持つサービス コンポーネントを作成する。
- マネージ DPAPI クラス ライブラリを呼び出す。
- サービス コンポーネントを起動するためのダミー クラスを作成する。
- Enterprise Services アプリケーションと Windows サービスの実行に使用する Windows アカウントを作成する。
- 厳密名を構成し、サービス コンポーネントを登録する。
- サービス コンポーネントを起動するための Windows サービス アプリケーションを作成する。
- Windows サービスをインストールし、起動する。
- 暗号化と解読のルーチンをテストするための Web アプリケーションを作成する。
- 暗号化された接続文字列をアプリケーション構成ファイルから読み取ることができるように、Web アプリケーションを修正する。
1. Encrypt メソッドと Decrypt メソッドを公開するサービス コンポーネントを作成する
ここでは、Encrypt メソッドと Decrypt メソッドを公開するサービス コンポーネントを作成します。この 2 つのメソッドは、後の手順で暗号化処理が必要なときに ASP.NET Web アプリケーションから呼び出されます。
■ Encrypt メソッドと Decrypt メソッドを公開するサービス コンポーネントを作成するには
- Visual Studio .NET を起動し、"DPAPIComp" という名前で新しい C# クラス ライブラリを作成します。
- ソリューション エクスプローラで、class1.cs の名前を DataProtectorComp.cs に変更します。
- DataProtectorComp.cs 内の Class1 の名前を DataProtectorComp に変更し、それに応じて既定のコンストラクタの名前も変更します。
- System.EnterpriseServices.dll アセンブリへのアセンブリ参照を追加します。
- DataProtectorComp.cs の先頭に次の using ステートメントを追加します。
using System.EnterpriseServices;
using System.Security.Principal;
using System.Runtime.InteropServices;
- DataProtectorComp クラスを ServicedComponent クラスの派生クラスとします。
public class DataProtectorComp : ServicedComponent
- 次の 2 つの空のパブリック メソッドを DataProtectorComp クラスに追加します。
public byte[] Encrypt(byte[] plainText)
{}
public byte[] Decrypt(byte[] cipherText)
{}
2. マネージ DPAPI クラス ライブラリを呼び出す
ここでは、マネージ DPAPI クラス ライブラリを呼び出して、データの暗号化と解読を行います。このクラス ライブラリは、Win32 DPAPI の関数呼び出しをカプセル化したものです。このクラス ライブラリをまだ作成していない場合は、このガイドの「パート IV : 参照」の「DPAPI ライブラリを作成する方法」を参照して作成してください。
■ マネージ DPAPI クラス ライブラリを呼び出すには
- DataProtection.dll アセンブリへのファイル参照を追加します。
- DataProtectorComp.cs の既存の using ステートメントの下に、次の using ステートメントを追加します。
using DataProtection;
- Encrypt メソッドに、渡されたデータを暗号化する次のコードを追加します。
DataProtector dp = new DataProtector( DataProtector.Store.USE_USER_STORE );
byte[] cipherText = null;
try
{
cipherText = dp.Encrypt(plainText, null);
}
catch(Exception ex)
{
throw new Exception("Exception encrypting. " + ex.Message);
}
return cipherText;
- Decrypt メソッドに、渡された暗号化データを解読するコードを追加します。
DataProtector dp = new DataProtector( DataProtector.Store.USE_USER_STORE );
byte[] plainText = null;
try
{
plainText = dp.Decrypt(cipherText,null);
}
catch(Exception ex)
{
throw new Exception("Exception decrypting. " + ex.Message);
}
return plainText;
3. サービス コンポーネントを起動するためのダミー クラスを作成する
ここでは、Launch メソッドのみを公開するダミー クラスを作成します。このメソッドは、サービス コンポーネントをホストする Enterprise Services アプリケーションを起動するときに Windows サービスが呼び出します。
■ サービス コンポーネントを起動するためのダミー クラスを作成するには
- プロジェクトに Launcher.cs という名前で新しい C# クラスを追加します。
- 次のメソッドをクラスに追加します。このメソッドは、サービスの開始時にサービスから呼び出されます。
public bool Launch()
{
return true;
}
- [ビルド] メニューの [ソリューションのビルド] をクリックします。
4. Enterprise Services アプリケーションと Windows サービスの実行に使用する Windows アカウントを作成する
ここでは、DataProtectorComp サービス コンポーネントと Windows サービスをホストする Enterprise Services アプリケーションの実行に使用する Windows アカウントを作成します。Windows アカウントを作成すると、そのアカウントのユーザー プロファイルも併せて作成されます。このユーザー プロファイルは、ユーザー ストアで DPAPI を使用する場合に必要となります。
■ Enterprise Services アプリケーションと Windows サービスの実行に使用する Windows アカウントを作成するには
- DPAPIAccount という名前で新しいローカル ユーザー アカウントを作成します。パスワードを入力して、[ユーザーは次回ログオン時にパスワードの変更が必要] チェック ボックスをオフに、[パスワードを無期限にする] チェック ボックスをオンにします。
- [管理ツール] プログラム グループの [ローカル セキュリティ ポリシー] ツールを使用して、アカウントに [ローカル ログオン] および [バッチ ジョブとしてログオン] の特権を与えます。
■ 新しいアカウントのユーザー プロファイルを作成するには
Windows をログオフします。
新しいアカウント DPAPIAccount でログオンします。
これで、新しいアカウントのユーザー プロファイルが作成されます。
Windows をログオフして、通常の開発者アカウントで、もう一度ログオンします。
5. 厳密名を構成し、サービス コンポーネントを登録する
ここでは、サービス コンポーネントのアセンブリを署名して厳密名を付けます。サービス コンポーネントを含むアセンブリの場合、この手順は必須です。次に、COM+ カタログ内のサービス コンポーネントを構成するためのアセンブリ レベルの属性をサービス コンポーネントのアセンブリに追加します。続いて、Regsvcs.exe ユーティリティを使用してサービス コンポーネントを登録し、ホスト COM+ サーバー アプリケーションを作成します。最後に、COM+ アプリケーションの実行用 ID として、前の手順で作成したサービス アカウントを設定します。
■ 厳密名を構成し、サービス コンポーネントを登録するには
- コマンド プロンプトを開き、DPAPIComp プロジェクトのフォルダに移動します。
- sn.exe ユーティリティを使用して、アセンブリの署名に使用するキーのペアを生成します。
sn -k dpapicomp.snk
- Visual Studio .NET に戻って、Assemblyinfo.cs を開きます。
- AssemblyKeyFile 属性を探し、プロジェクト フォルダ内のキー ファイルへのパスを追加します。
[assembly: AssemblyKeyFile(@"..\..\dpapicomp.snk")]
- ファイルの先頭に次の using ステートメントを追加します。
using System.EnterpriseServices;
- 次のアセンブリ レベル属性を追加して、COM+ アプリケーションをサーバー アプリケーションとして構成し、アプリケーションの名前を指定します。
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationName("DPAPI Helper Application")]
- [ビルド] メニューの [ソリューションのビルド] をクリックして、サービス コンポーネント プロジェクトをビルドします。
- コマンド プロンプトを開き、DPAPIComp.dll ファイルが格納されているプロジェクトの出力ディレクトリに移動します。
- regsvcs.exe を使用して、サービス コンポーネントを登録し、COM+ アプリケーションを作成します。
regsvcs DPAPIComp.dll
- コンポーネント サービスの Microsoft 管理コンソール (MMC) スナップインを開きます。
- [コンポーネント サービス]、[コンピュータ]、[マイ コンピュータ]、[COM+ アプリケーション] の順に展開します。
- [DPAPI Helper Application] を右クリックし、[プロパティ] をクリックします。
- [アクティブ化] タブをクリックして、アプリケーションの種類に [サーバー アプリケーション] が設定されていることを確認します。
- [ID] タブをクリックして、[このユーザー] をクリックします。
- ユーザーとして「DPAPIAccount」を入力し、パスワードを入力します。次に、[OK] をクリックして、[プロパティ] ダイアログ ボックスを閉じます。
6. サービス コンポーネントを起動するための Windows サービス アプリケーションを作成する
ここでは、起動時にサービス コンポーネントを自動的に起動する Windows サービス アプリケーションを作成します。これにより、作成したアカウントのプロファイルが確実に読み込まれるようにして、データの暗号化と解読を処理するサービス コンポーネントを利用可能な状態に置きます。
■ サービス コンポーネントを起動するための Windows サービス アプリケーションを作成するには
Visual Studio .NET の新しいインスタンスを起動して、"DPAPIService" という名前で新しい C# Windows サービス プロジェクトを作成します。
ソリューション エクスプローラで、Service1.cs の名前を DPAPIService.cs に変更します。
DPAPIService.cs 内の Service1 の名前を DPAPIService に変更し、それに応じて既定のコンストラクタの名前も変更します。
DPAPIService.cs 内で、InitializedComponent メソッドを探し、サービス名を DPAPIService に変更します。
System.EnterpriseServices.dll アセンブリ、System.Configuration.Install.dll アセンブリへの参照を設定します。
DPAPIComp アセンブリへのファイル参照を設定します。
DPAPIService.cs の先頭の既存の using ステートメントの下に次の using ステートメントを追加します。
using DPAPIComp;
- Main メソッドを探し、次のコードを変更します。
ServicesToRun = new System.ServiceProcess.ServiceBase[]{new Service1()};
変更後のコードは、以下のとおりです。
ServicesToRun = new System.ServiceProcess.ServiceBase[]{new DPAPIService()};
- OnStart メソッドを探し、次のコードを追加します。このコードにより、サービスの開始時に必ず DPAPIComp コンポーネントが起動されるようになります。
Launcher launchComponent = new Launcher();
launchComponent.Launch();
プロジェクトに DPAPIServiceInstaller という名前で新しい C# クラス ファイルを追加します。
DPAPIServiceInstaller の先頭の既存の using ステートメントの下に次の using ステートメントを追加します。
using System.ComponentModel;
using System.ServiceProcess;
using System.Configuration.Install;
DPAPIServiceInstaller クラスを Installer クラスの派生クラスとします。 public class DPAPIServiceInstaller : Installer
次に示すように、クラス レベルで RunInstaller 属性を適用します。
[RunInstaller(true)]
public class DPAPIServiceInstaller : Installer
- 次の 2 つのプライベート メンバ変数を DPAPIServiceInstaller クラスに追加します。オブジェクトは、サービスのインストール時に使用されます。
private ServiceInstaller dpApiInstaller;
private ServiceProcessInstaller dpApiProcessInstaller;
- DPAPIServiceInstaller クラスのコンストラクタに次のコードを追加します。
dpApiInstaller = new ServiceInstaller();
dpApiInstaller.StartType = System.ServiceProcess.ServiceStartMode.Manual;
dpApiInstaller.ServiceName = "DPAPIService";
dpApiInstaller.DisplayName = "DPAPI Service";
Installers.Add (dpApiInstaller);
dpApiProcessInstaller = new ServiceProcessInstaller();
dpApiProcessInstaller.Account = ServiceAccount.User;
Installers.Add (dpApiProcessInstaller);
- [ビルド] メニューの [ソリューションのビルド] をクリックします。
7. Windows サービス アプリケーションをインストールし、起動する
ここでは、installutil.exe ユーティリティを使用して Windows サービスをインストールし、Windows サービスを起動します。
■ Windows サービス アプリケーションをインストールし、起動するには
コマンド プロンプトを開き、DPAPIService プロジェクト フォルダの下の Bin\Debug ディレクトリに移動します。
installutil.exe ユーティリティを実行して、サービスをインストールします。
Installutil.exe DPAPIService.exe
[サービス ログインの設定] ダイアログ ボックスに、「Enterprise Services アプリケーションと Windows サービスの実行に使用する Windows アカウントを作成する」の手順で作成したアカウントのユーザー名とパスワードを入力し、[OK] をクリックします。
ユーザー名の形式は "authority\username" にする必要があります。
installutil.exe ユーティリティからの出力を参照して、サービスが正常にインストールされていることを確認します。
[管理ツール] プログラム グループから [サービス] MMC スナップインを開きます。
DPAPI サービスを開始します。
8. 暗号化と解読のルーチンをテストするための Web アプリケーションを作成する
ここでは、暗号化と解読のルーチンのテストに使用できる簡単な Web アプリケーションを作成します。この Web アプリケーションは、Web.config ファイルに暗号化された状態で格納されているデータを解読するためにも使用します。
■ 暗号化と解読のルーチンをテストするための Web アプリケーションを作成するには
既存の DPAPIComp ソリューションに DPAPIWeb という名前で新しい C# Web アプリケーション プロジェクトを追加します。
System.EnterpriseServices へのアセンブリ参照を追加し、DPAPIComp プロジェクトへのプロジェクト参照を追加します。
デザイン モードで WebForm1.aspx を開き、図 1 のようなフォームを作成します。このとき、表 1 に示す各コントロールに対応する ID を使用してください。
表 1 WebForm1.aspx に配置するコントロールの ID
コントロール ID [暗号化するデータ] ボックス txtDataToEncrypt [暗号化後のデータ] ボックス txtEncryptedData [解読後のデータ] ボックス txtDecryptedData [暗号化] ボタン btnEncrypt [解読] ボタン btnDecrypt エラー ラベル lblError 図 1 DPAPIWeb Web フォーム
[暗号化] ボタンをダブルクリックして、ボタン クリック イベント ハンドラを表示します。
ファイルの先頭の既存の using ステートメントの下に次の using ステートメントを追加します。
using System.Text;
using DPAPIComp;
- [暗号化] ボタンのクリック イベント ハンドラに戻り、DataProtectorComp サービス コンポーネントを呼び出し、Web フォームから渡されたデータを暗号化するコードを追加します。
DataProtectorComp dp = new DataProtectorComp();
try
{
byte[] dataToEncrypt = Encoding.ASCII.GetBytes(txtDataToEncrypt.Text);
txtEncryptedData.Text = Convert.ToBase64String(
dp.Encrypt(dataToEncrypt));
}
catch(Exception ex)
{
lblError.ForeColor = Color.Red;
lblError.Text = "Exception.<br>" + ex.Message;
return;
}
lblError.Text = "";
Web フォームに戻って、[解読] ボタンをダブルクリックしてボタン クリック イベント ハンドラを作成します。
DataProtectorComp サービス コンポーネントを呼び出し、txtEncryptedData フィールドの暗号化されたデータを解読するコードを追加します。
DataProtectorComp dp = new DataProtectorComp();
try
{
byte[] dataToDecrypt = Convert.FromBase64String(txtEncryptedData.Text);
txtDecryptedData.Text = Encoding.ASCII.GetString(
dp.Decrypt(dataToDecrypt));
}
catch(Exception ex)
{
lblError.ForeColor = Color.Red;
lblError.Text = "Exception.<br>" + ex.Message;
return;
}
lblError.Text = "";
[ビルド] メニューの [ソリューションのビルド] をクリックします。
Webform1.aspx を右クリックし、[ブラウザで表示] をクリックします。
[暗号化するデータ] ボックスに文字列を入力します。
[暗号化] ボタンをクリックします。COM+ アプリケーション内の DataProtector サービス コンポーネントが呼び出されます。暗号化されたデータが [暗号化後のデータ] ボックスに表示されます。
[解読] ボタンをクリックして、元の文字列が [解読後のデータ] ボックスに表示されていることを確認します。
ブラウザ ウィンドウを閉じます。
メモ コンポーネントの ProgID を HKEY_CLASSES_ROOT から取得できないことを示すアクセス拒否エラーのメッセージが表示された場合は、Regsvcs.exe をもう一度実行し、サービス コンポーネントを登録し直すことで解決できることがあります。
このエラー メッセージは、サービス コンポーネントのアセンブリを再コンパイルした後、そのアセンブリを登録し直していない場合に発生します。アセンブリのバージョン属性の既定値は "1.0.*" のため、ビルドを実行するごとにアセンブリのバージョンは変更されるので、ビルドのたびに、新しい CLSID が生成されることになります。この場合、ASP.NET は、まだ存在していない CLSID にアクセスしようとするため、エラーが発生するものです。Regsvcs.exe をもう一度実行して、Web アプリケーションを再起動することで、問題は解決できます。
9. 暗号化された接続文字列をアプリケーション構成ファイルから読み取ることができるように Web アプリケーションを修正する
ここでは、暗号化されたデータベース接続文字列をアプリケーションの Web.config ファイルの <appSettings> 要素に記述します。次に、Web.config ファイルから暗号化された文字列を読み取り、解読するコードを追加します。
■ 暗号化された接続文字列をアプリケーション構成ファイルから読み取ることができるように、Web アプリケーションを修正するには
- Visual Studio .NET に戻って、デザイナ モードで WebForm1.aspx を表示します。
- フォームに別のボタンを追加します。そのボタンの Text プロパティと ID プロパティを、それぞれ "構成ファイルから文字列を解読" と "btnDecryptConfig" に設定します。
- ボタンをダブルクリックして、ボタン クリック イベント ハンドラを作成します。
- ファイルの先頭の既存の using ステートメントの下に次の using ステートメントを追加します。
using System.Configuration;
- btnDecryptConfig_Click イベント ハンドラに戻って、Web.config ファイルの <appSettings> セクションからデータベース接続文字列を取得するコードを追加します。
DataProtectorComp dec = new DataProtectorComp();
try
{
string appSettingValue =
ConfigurationSettings.AppSettings["connectionString"];
byte[] dataToDecrypt = Convert.FromBase64String(appSettingValue);
string connStr = Encoding.ASCII.GetString(
dec.Decrypt(dataToDecrypt));
txtDecryptedData.Text = connStr;
}
catch(Exception ex)
{
lblError.ForeColor = Color.Red;
lblError.Text = "Exception.<br>" + ex.Message;
return;
}
lblError.Text = "";
- [ビルド] メニューの [ソリューションのビルド] をクリックして、プロジェクトを再度ビルドします。
- Webform1.aspx を右クリックし、[ブラウザで表示] をクリックします。
- [暗号化するデータ] ボックスに、たとえば次のようにデータベース接続文字列を入力します。
server=(local);Integrated Security=SSPI; database=Northwind
- [暗号化] ボタンをクリックします。
- 暗号化された文字列を選択して、クリップボードにコピーします。
- Visual Studio .NET に切り替え、Web.config ファイルの <system.web> 要素の外に次の <appSettings> 要素を追加します。クリップボードにコピーした暗号化された状態の接続文字列を、value 属性の値として貼り付けます。
<appSettings>
<add key="connectionString" value="encrypted connection string" />
</appSettings>
- Web.config を保存します。
- [構成ファイルから文字列を解読] ボタンをクリックして、暗号化されたデータベース接続文字列が Web.config ファイルから正常に読み取られ、その解読された接続文字列が [解読後のデータ] ボックスに正常に表示されていることを確認します。
参考資料
- MSDN ライブラリの「Windows Data Protection」(英語情報)
- このガイドの「パート IV : 参照」の「DPAPI ライブラリを作成する方法」
- このガイドの「パート IV : 参照」の「ASP.NET から DPAPI (コンピュータ ストア) を使用する方法」