次の方法で共有


チュートリアル : RSA キー コンテナの作成とエクスポート

更新 : 2007 年 11 月

暗号化キーを作成、エクスポート、およびインポートし、複数のサーバー上にある暗号化された単一のファイルから、Web.config ファイルの暗号化されたセクションを復号化する手順ごとの例を示します。

保護された構成を使用すると、構成ファイルに格納された機密情報を暗号化できるため、アプリケーションのセキュリティを強化できます。.NET Framework では、構成ファイルを処理するときにファイルを自動的に復号化するため、復号化のためのコードを追加する必要はありません。aspnet_regiis.exe を使用して構成のセクションを暗号化し、暗号化キーを管理できます。保護された構成の詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。

保護された構成を使用すると、RsaProtectedConfigurationProvider プロバイダで使用するカスタム暗号化キーの作成、削除、エクスポート、およびインポートを行うことができます。これにより、暗号化キーのバックアップ コピーを作成したり、暗号化キーを Web ファームなどの複数の Web サーバーにコピーしたりできるため、暗号化された Web.config ファイルを持つアプリケーションを複数の場所にコピーできます。

このチュートリアルでは、次の作業を行う方法について説明します。

  • カスタム RSA キー コンテナを作成する。

  • カスタム RSA キー コンテナを使用する保護された構成プロバイダを指定する。

  • カスタム RSA キー コンテナを使用して、Web.config ファイルのセクションを暗号化する。

  • カスタム RSA キー コンテナを XML ファイルにエクスポートする。

  • カスタム RSA キー コンテナを XML ファイルからインポートする。

前提条件

このチュートリアルを実行するための要件は次のとおりです。

  • サイトをホストするコンピュータにインストールして構成した Microsoft Internet Information Services (IIS)。

    IIS をインストールして構成する方法の詳細については、IIS のインストールに含まれているオンライン ヘルプ、または「Internet Information Services (IIS) 6.0 Technical Resources」を参照してください。

  • ASP.NET Web サイト。

    既に Web サイトがある場合は、そのサイトをこのチュートリアルで使用できます。Web サイトがない場合は、仮想ディレクトリまたは Web サイトを作成する方法の詳細について、「方法 : IIS 5.0 および 6.0 内で仮想ディレクトリを作成および構成する」を参照してください。

カスタム RSA キー コンテナの作成

ここでは、-pc オプションを指定して aspnet_regiis.exe を使用し、RSA キー コンテナを作成します。この場合、RSA キー コンテナはユーザー レベルのキー コンテナとして識別されます。RSA キー コンテナは、-pku オプションを使用してユーザー レベルとして識別するか、-pku オプションを省略してマシン レベルとして識別する必要があります。マシン レベルの RSA キー コンテナと、ユーザー レベルの RSA キー コンテナの詳細については、「コンピュータ レベルの RSA キー コンテナおよびユーザー レベルの RSA キー コンテナについて」を参照してください。

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

  1. コマンド プロンプトを開きます。

    • これを行うには、Microsoft Windows の [開始] メニューをクリックし、[ファイル名を指定して実行] をクリックします。次に [名前] ボックスに「cmd」と入力し、[OK] をクリックします。
  2. コマンド プロンプトで、次のコマンドを入力して、ディレクトリを .NET Framework Version 2.0 のディレクトリに変更します。

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  3. 次のオプションを指定して aspnet_regiis.exe を実行し、新しいマシン レベルの RSA キー コンテナを作成します。

    • -pc オプション。この後に RSA キー コンテナの名前を指定して、RSA キー ペアを作成します。

    • -exp オプション。キーを確実にエクスポートできるようにします。

    次のコマンドによって、"MyKeys" キー コンテナが作成されます。

    aspnet_regiis -pc "MyKeys" -exp

    コマンド プロンプト ウィンドウは閉じないでください。

RSA 暗号化キーへの読み取りアクセスの付与

ASP.NET で Web.config ファイル内の暗号化された情報を復号化するには、ASP.NET アプリケーションの ID に、暗号化されたセクションの暗号化と復号化に使用される暗号化キーへの読み取りアクセス権が必要になります。

ASP.NET の ID に RSA キー コンテナへのアクセスを付与するには

  1. テキスト エディタを開き、次のコードを新しいファイルにコピーします。

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
  2. このファイルに identity.aspx という名前を付け、アプリケーション ディレクトリに保存します。

  3. ASP.NET アプリケーションの ID を確認するには、ブラウザで identity.aspx を開きます。

    ASP.NET アプリケーションの偽装された ID がブラウザに表示されます。

    2w117ede.alert_note(ja-jp,VS.90).gifメモ :

    このチュートリアルでは、サイトで偽装認証を使用しません。つまり、ASP.NET アプリケーションの ID として匿名認証だけを使用します。このチュートリアルでは、アプリケーションの ID が現在ログオンに使用しているユーザー ID と同じ場合 (たとえば DOMAIN\userid など) は、アプリケーションの Web.config ファイルで偽装を無効にします。偽装を無効にするには、Web.config ファイルを編集して <identity> 要素を削除します。この変更をしたら、ブラウザの identity.aspx を再表示し、アプリケーションの変更後の ID を表示します。

  4. コマンド プロンプトで、次のオプションを使用して aspnet_regiis.exe を実行し、RSA キー コンテナへのアクセス権をその ID に付与します。

    • -pa。この後に RSA キー コンテナ名である "MyKeys" を指定します。

    • 前の手順で特定した ASP.NET アプリケーションの ID。

    たとえば、次のコマンドによって、NETWORK SERVICE アカウントに、コンピュータ レベルの RSA キー コンテナ "MyKeys" へのアクセス権が付与されます。

    2w117ede.alert_note(ja-jp,VS.90).gifメモ :

    Windows Server 2003 上にある Web.config ファイルで ASP.NET アプリケーションの偽装が無効になっている場合、このアプリケーションの ID は NETWORK SERVICE アカウントです (旧バージョンの Windows では、これはローカルの ASPNET アカウントです)。

    aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"

保護された構成プロバイダの指定

ここでは、保護された構成プロバイダのインスタンスを ASP.NET アプリケーションの Web.config ファイルに指定します。"MyKeys" というマシン レベルの RSA キー コンテナを使用する保護された構成プロバイダのインスタンスは、前の手順で作成したインスタンスです。

保護された構成プロバイダのインスタンスを指定するには

  1. テキスト エディタを開き、ASP.NET アプリケーションの Web.config ファイルを開きます。

    • ASP.NET アプリケーションの Web.config ファイルがない場合は、テキスト エディタを開き、サンプル構成を新しいファイルにコピーします。ファイルに web.config という名前を付けて、ASP.NET アプリケーション ディレクトリに保存します。
  2. 次の例に示すように、構成に <connectionStrings> 要素が含まれていることを確認します。

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  3. 次の例に示すように、"MyKeys", というマシン レベルの RSA キー コンテナを使用する、RsaProtectedConfigurationProvider クラスの "MyProvider" というインスタンスを含む <configProtectedData> セクションを追加します。

    <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>
    
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  4. Web.config ファイルを保存して閉じます。

Web.config ファイルのセクションの暗号化

これで、"MyKeys" RSA キー コンテナを使用する RsaProtectedConfigurationProvider クラスのインスタンスが指定され、ASP.NET アプリケーションの ID に "MyKeys" への読み取りアクセス権が付与されました。"MyKeys" を使用して ASP.NET アプリケーションの Web.config ファイルのセクションを暗号化すると、ASP.NET は Web.config ファイルを処理するときにそのセクションを復号化します。

Web.config ファイルの <connectionStrings> セクションを暗号化するには

  1. コマンド プロンプトで、次のオプションを使用して aspnet_regiis.exe を実行します。

    • -pe オプション。この後に "connectionStrings" を指定して、アプリケーションの Web.config ファイルの <connectionStrings> 要素を暗号化します。

    • -app オプション。アプリケーションの名前を識別するために指定します。

    • -prov オプション。この後に "MyProvider" を指定して、前のセクションで Web.config ファイルに指定した RsaProtectedConfigurationProvider プロバイダを識別します。

    たとえば、次のコマンドによって、MyApplication というアプリケーションの Web.config ファイルの <connectionStrings> セクションが暗号化されます。

    aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider"

  2. Web.config ファイルを開き、暗号化された内容を表示します。

    次のサンプル 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>
    
       <connectionStrings configProtectionProvider="MyProvider">
          <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>
    </configuration>
    
  3. Web.config ファイルを閉じます。

復号化された構成設定へのアクセス

ASP.NET は Web.config ファイルを処理するときに、ファイルの内容を自動的に復号化します。そのため、ASP.NET の他の機能で使用する暗号化された構成設定を復号化したり、コード内の値にアクセスしたりするための手順は不要です。ただし、復号化された設定を表示する場合は、次の手順に従います。

復号化された構成値を表示するには

  1. テキスト エディタを開き、ASP.NET の次のコードを新しいファイルにコピーします。

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Configuration" %>
    <script runat="server">
    
    Public Sub Page_Load()
    
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings
      ConnectionStringsGrid.DataBind()
    End Sub
    
    </script>
    <html>
    
    <body>
    
    <form runat="server">
      <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Configuration" %>
    <script runat="server">
    
    public void Page_Load()
    {
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings;
      ConnectionStringsGrid.DataBind();
    }
    
    </script>
    <html>
    
    <body>
    
    <form runat="server">
      <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
  2. このファイルに walkthrough.aspx という名前を付けて保存してから、そのファイルをブラウザで表示します。

    暗号化された Web.config ファイルから復号化された値を確認します。

RSA キー コンテナのエクスポートとインポート

キー値のバックアップ コピーとして、RSA キー コンテナを XML ファイルにエクスポートできます。また、RSA キー コンテナをエクスポートして、暗号化された Web.config ファイルを含むアプリケーションのコピーをホストする別の Web サーバーにコピーすることもできます。Web.config ファイルの暗号化で使用した特定の RSA キー コンテナがない場合、ASP.NET は暗号化された構成値を復号化できません。

復号化された構成値を表示するには

  1. コマンド プロンプトで、次のオプションを使用して aspnet_regiis.exe を実行します。

    • -px オプション。この後に、このチュートリアルの前半の「カスタム RSA キー コンテナの作成」で作成した RSA キー コンテナの名前である "MyKeys" を指定します。

    • キー コンテナのエクスポート先となる .xml ファイルのパス。

    • -pri オプション。秘密キーの情報を確実にエクスポートするために指定します。このオプションを指定しない場合、情報はエクスポートされたキー情報で暗号化されますが、復号化はされません。

    たとえば、次のコマンドによって、"MyKeys" という名前のマシン レベル RSA キー コンテナが、C ドライブのルート ディレクトリにある keys.xml という .xml ファイルにエクスポートされます。

    aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri

    2w117ede.alert_note(ja-jp,VS.90).gifメモ :

    RSA キー コンテナを使用して暗号化された Web.config ファイルをだれも復号化できないようにするために、RSA キー コンテナを .xml ファイルにエクスポートした後で、この .xml ファイルを Web サーバーの外部の場所にコピーし、ファイルを Web サーバーから削除します。

    これで、暗号化された Web.config ファイルを使用して、アプリケーションを別の Web サーバーにコピーするために必要なすべての情報が用意できました。

  2. 暗号化された Web.config ファイルを使用してアプリケーションを別の Web サーバーにコピーする場合は、手順 4. に進んでください。

  3. Web アプリケーションをコピーする 2 台目の Web サーバーがない場合、このチュートリアルを続けるには、次の手順をすべて行って Web サーバーから RSA キー コンテナを削除します。その後で、この Web サーバーを 2 台目の Web サーバーとして扱います。

    1. RSA キー コンテナを削除するには、コマンド プロンプトで、-pz スイッチの後に "MyKeys" を指定して、aspnet_regiis.exe を実行します。

      たとえば、次のコマンドによって "MyKeys" が削除されます。

      aspnet_regiis -pz "MyKeys"

    2. 手順 5. に進みます。

  4. 暗号化された Web.config ファイルを含む Web アプリケーションを 2 台目の Web サーバーにコピーします。

    • 2 台目のサーバーに Web アプリケーションをコピーする方法が不確かな場合は、既存のアプリケーションのフォルダとその内容全体を 2 台目の Web サーバーにコピーしてから、アプリケーションを Web アプリケーションとして識別します。これを行うには、「方法 : IIS 5.0 および 6.0 内で仮想ディレクトリを作成および構成する」に示す手順に従ってください。
  5. 2 台目のサーバーで、コマンド プロンプト ウィンドウを開き、次のコマンドを入力して、ディレクトリを .NET Framework Version 2.0 のディレクトリに変更します。

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  6. エクスポートした RSA キー コンテナが格納された .xml ファイルを、2 台目の Web サーバーの .NET Framework Version 2.0 ディレクトリにコピーします。

    このチュートリアルでは、keys.xml ファイルを C ドライブのルート ディレクトリにコピーします。

  7. 2 台目の Web サーバーのコマンド プロンプトで、次のオプションを指定して aspnet_regiis.exe を実行します。

    • -pi オプション。この後に、エクスポートしたキー コンテナの名前である "MyKeys" を指定して、RSA キー コンテナをインポートします。

    • エクスポートしたキー コンテナを格納する .xml ファイルのパス。

    たとえば、次のコマンドによって、"MyKeys" という名前の RSA キー コンテナがインポートされます。

    aspnet_regiis -pi "MyKeys" "c:\keys.xml"

  8. 2 台目のサーバーから、エクスポートした RSA キー コンテナを格納する .xml ファイルのコピーを削除します。

  9. 2 台目の Web サーバーで、ASP.NET アプリケーションの ID を確認し、このチュートリアルの前半の「RSA 暗号化キーへの読み取りアクセスの付与」の手順に従って、インポートした RSA キー コンテナへのアクセス権をその ID に与えます。

  10. 2 台目の Web サーバーで、前のセクションの手順に従って、暗号化された Web.config ファイルから復号化された構成セクションを表示します。

参照

処理手順

チュートリアル : 保護された構成を使用した構成情報の暗号化

その他の技術情報

保護された構成を使用した構成情報の暗号化