チュートリアル : 保護された構成を使用した構成情報の暗号化
更新 : 2007 年 11 月
ASP.NET アプリケーションの構成ファイルのセクションを暗号化する手順例を示します。
保護された構成を使用すると、Web.config ファイルに格納された機密情報を暗号化できるため、アプリケーションのセキュリティが強化されます。aspnet_regiis.exe を使用して Web.config ファイルのセクションを暗号化し、暗号化キーを管理できます。ASP.NET は、構成ファイルを処理するときにファイルを復号化します。したがって、復号化を行うための追加コードは不要です。保護された構成の詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。
このチュートリアルでは、次の作業を行う方法について説明します。
既定の保護された構成プロバイダを使用して、Web.config ファイルのセクションを暗号化する。
ASP.NET ページの復号化された構成情報にアクセスする。
前提条件
このチュートリアルを実行するための要件は次のとおりです。
サイトをホストするコンピュータにインストールして構成した Microsoft Internet Information Services (IIS)。
IIS をインストールして構成する方法の詳細については、IIS のインストールに含まれているオンライン ヘルプ、または Internet Information Services (IIS) 6.0 のテクニカル リソースを参照してください。
ASP.NET Web サイト。
既に Web サイトがある場合は、そのサイトを使用できます。Web サイトがない場合は、仮想ディレクトリまたは Web サイトを作成する方法の詳細について、「方法 : IIS 5.0 および 6.0 内で仮想ディレクトリを作成および構成する」を参照してください。
RSA 暗号化キーへの読み取りアクセスの付与
ASP.NET で Web.config ファイル内の暗号化された情報を復号化するには、ASP.NET アプリケーションの ID に、暗号化されたセクションの暗号化と復号化に使用される暗号化キーへの読み取りアクセス権が必要になります。このチュートリアルでは、Machine.config ファイルに指定されている、"RsaProtectedConfigurationProvider" という既定の RsaProtectedConfigurationProvider プロバイダを使用します。既定の RsaProtectedConfigurationProvider プロバイダで使用する RSA キー コンテナの名前は "NetFrameworkConfigurationKey" です。
ASP.NET ID に既定の RSA キー コンテナへの読み取りアクセスを付与するには
テキスト エディタを開き、次のコードを新しいファイルにコピーします。
<%@ Page Language="VB" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name) %>
<%@ Page Language="C#" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>
このファイルに identity.aspx という名前を付け、アプリケーション ディレクトリに保存します。
ASP.NET アプリケーションの ID を確認するには、ブラウザで identity.aspx を開きます。
ASP.NET アプリケーションの偽装された ID がブラウザに表示されます。
メモ : このチュートリアルでは IIS を使用するため、サイトの認証に偽装を使用しません。つまり、このチュートリアルでは、ASP.NET アプリケーションの ID として匿名認証だけを使用します。アプリケーションの ID が現在ログオンで使用しているユーザー ID と同じ場合 (たとえば DOMAIN\myuserid など) は、アプリケーションの Web.config ファイルで偽装を無効にします。Web.config ファイルで偽装を無効にするには、Web.config ファイルを開いて <identity> 要素を削除します。<identity> 要素を削除したら、ブラウザの identity.aspx を再表示し、アプリケーションの変更後の ID を表示します。
コマンド プロンプトで、次のオプションを使用して aspnet_regiis.exe を実行します。
-pa オプション。この後に、既定の RsaProtectedConfigurationProvider の RSA キー コンテナの名前を指定します。
前の手順で特定した ASP.NET アプリケーションの ID。
たとえば、次のコマンドによって、NETWORK SERVICE アカウントに、コンピュータ レベルの "NetFrameworkConfigurationKey" RSA キー コンテナへのアクセス権が付与されます。
メモ : Microsoft Windows Server 2003 を実行するコンピュータの Web.config ファイルで ASP.NET アプリケーションの偽装が無効になっている場合、このアプリケーションの ID はアプリケーション プールの ID です。既定では、これは NETWORK SERVICE アカウントです (以前のバージョンの Windows ではローカルの ASPNET アカウントです)。
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
コマンド プロンプト ウィンドウは閉じないでください。
Web.config ファイルのセクションの暗号化
これで ASP.NET アプリケーションの ID に既定の RsaProtectedConfigurationProvider オブジェクトの RSA キー コンテナの読み取りアクセス権が付与されました。次にこのキー コンテナを使用して、ASP.NET アプリケーションの Web.config ファイルのセクションを暗号化します。ASP.NET は、Web.config ファイルを処理するときにセクションを復号化します。
Web.config ファイルの <connectionStrings> セクションと <machineKey> セクションを暗号化するには
テキスト エディタで、アプリケーションの Web.config ファイルを開きます。
- ASP.NET アプリケーションの Web.config ファイルがない場合は、テキスト エディタを開き、サンプル構成を新規ファイルにコピーします。次に、そのファイルに web.config という名前を付けて ASP.NET アプリケーション ディレクトリに保存します。
次の例に示すように、<system.web> 要素の <connectionStrings> 子要素と <machineKey> 子要素の両方があることを確認してください。
<configuration> <connectionStrings> <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" /> </connectionStrings> <system.web> <machineKey validationKey="D61B3C89CB33A2F1422FF158AFF7320E8DB8CB5CDA1742572A487D94018787EF42682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="FBF50941F22D6A3B229EA593F24C41203DA6837F1122EF17" /> </system.web> </configuration>
Web.config ファイルを閉じます。
コマンド プロンプトで、次のコマンドを入力して、ディレクトリを .NET Framework Version 2.0 のディレクトリに変更します。
cd \WINDOWS\Microsoft.Net\Framework\v2.0.*
コマンド プロンプトで、次のオプションを使用して aspnet_regiis.exe を実行します。
-pe オプションと文字列 "connectionStrings"。アプリケーションの Web.config ファイルの connectionStrings 要素を暗号化するために指定します。
-app オプションとアプリケーションの名前。
たとえば、次のコマンドによって、MyApplication というアプリケーションの Web.config ファイルの <connectionStrings> セクションが暗号化されます。
aspnet_regiis -pe "connectionStrings" -app "/MyApplication"
次の例に示すように、<system.web> 要素の <machineKey> 子要素に対して、前の手順を繰り返します。
aspnet_regiis -pe "system.web/machineKey" -app "/MyApplication"
コマンド プロンプト ウィンドウは閉じないでください。
Web.config ファイルを開き、暗号化された内容を表示します。
次のサンプル Web.config ファイルと同様の内容が表示されます。
<configuration> <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <KeyName>RSA Key </KeyName> </KeyInfo> <CipherData> <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE= </CipherValue> </CipherData> </EncryptedData> </connectionStrings> <system.web> <machineKey configProtectionProvider="RsaProtectedConfigurationProvider"> <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <KeyName>RSA Key </KeyName> </KeyInfo> <CipherData> <CipherValue>IwUopItbWX0mJdGWtAqE1LlsG3u5RBRlAXs9/GZj3HEfeUXduHVF76q6Ip88YqlfLthH+DMBYdOZAF+hCOmS2agfTo1tKUvELRGIljS/BqEYxUO+/IOz9tllAw8ZlGF7AVCzptgIejI+iLXEZfMKW7f6EMGeb5vaaKXHIkYZwcM= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>ivVyERVPNUzIb/i7/NUbRkxsxh8IG959vycwrzJO0vYWxHZ5i03SfrLbsGUV17+FxZ6lbcrVaF5FY3zVm7dRMRvQpVFwaVcL </CipherValue> </CipherData> </EncryptedData> </machineKey> </system.web> </configuration>
Web.config ファイルを閉じます。
復号化された構成設定へのアクセス
ASP.NET は Web.config ファイルを処理するときに、ファイルの内容を自動的に復号化します。そのため、ASP.NET の他の機能で使用する暗号化された構成設定を復号化したり、コード内の値にアクセスしたりするための追加手順は不要です。ただし、復号化された設定を表示する場合は、次の手順に従います。
復号化された構成値を表示するには
テキスト エディタを開き、ASP.NET の次のコードを新しいファイルにコピーします。
<%@ Page Language="VB" %> <%@ Import Namespace="System.Configuration" %> <%@ Import Namespace="System.Web.Configuration" %> <script runat="server"> Public Sub Page_Load() ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings ConnectionStringsGrid.DataBind() Dim config As System.Configuration.Configuration = _ WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath) Dim key As MachineKeySection = _ CType(config.GetSection("system.web/machineKey"), MachineKeySection) DecryptionKey.Text = key.DecryptionKey ValidationKey.Text = key.ValidationKey End Sub </script> <html> <body> <form runat="server"> <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" /> <P> MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR> MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" /> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Import Namespace="System.Configuration" %> <%@ Import Namespace="System.Web.Configuration" %> <script runat="server"> public void Page_Load() { ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings; ConnectionStringsGrid.DataBind(); Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); MachineKeySection key = (MachineKeySection)config.GetSection("system.web/machineKey"); DecryptionKey.Text = key.DecryptionKey; ValidationKey.Text = key.ValidationKey; } </script> <html> <body> <form runat="server"> <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" /> <P> MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR> MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" /> </form> </body> </html>
このファイルに walkthrough.aspx という名前を付けて保存してから、そのファイルをブラウザで表示します。
暗号化された Web.config ファイルから復号化された値を確認します。
Web サイトの機密情報を非公開にするには、このチュートリアルを終了するときに walkthrough.aspx ファイルを削除します。
次の手順
-pd オプションを指定して aspnet_regiis.exe を実行すると、必要に応じて、暗号化された Web.config ファイルの内容を復号化できます。保護された構成プロバイダを指定しない点を除けば、この構文は、-pe オプションを使用して Web.config ファイルの内容を暗号化するための構文と同じです。適切なプロバイダは、protected セクションのconfigProtectionProvider 属性を使用して識別されます。たとえば、次のコマンドは、MyApplication という ASP.NET アプリケーションの Web.config ファイルの <connectionStrings> 要素と、<system.web> 要素の <machineKey> 子要素を復号化します。
aspnet_regiis -pd "connectionStrings" -app "/MyApplication"
aspnet_regiis -pd "system.web/machineKey" -app "/MyApplication"
参照
処理手順
チュートリアル : RSA キー コンテナの作成とエクスポート