保護された構成 RSA キー コンテナのインポートとエクスポート
更新 : 2007 年 11 月
保護された構成には、RsaProtectedConfigurationProvider の使用時に、RSA キー コンテナを作成、削除、エクスポート、およびインポートする機能が用意されています。これが役立つ シナリオの 1 つとして、Web ファームで、暗号化された同じ Web.config ファイルを複数のサーバーに配置する場合が挙げられます。この場合、同じ RSA キー コンテナもこれらのサーバーに配置する必要があります。これを行うには、アプリケーションの RSA キー コンテナを作成し、XML ファイルにエクスポートして、暗号化された Web.config ファイルを復号化する必要のある各サーバーにインポートします。
RSA キー コンテナを作成すると、単一の Web サーバーで複数の ASP.NET アプリケーションをホストする場合にも役立ちます。各アプリケーション、または特定の顧客が使用するアプリケーションの各セットに対応する RSA キー コンテナを作成すると、あるアプリケーションの RSA キー コンテナを使用して別のアプリケーションの Web.config ファイルを復号化することはできないため、アプリケーションの機密構成情報のセキュリティを向上させることができます。
RSA キー コンテナの作成
RSA キー コンテナを作成するには、ASP.NET IIS 登録ツール (Aspnet_regiis.exe) を –pc スイッチを指定して使用します。アプリケーションの Web.config ファイルの configProtectedData セクションで指定された RsaProtectedConfigurationProvider で使用するキー コンテナを識別する、キー コンテナ名を指定する必要があります。新しく作成した RSA キー コンテナを確実にエクスポート可能にするには、-exp オプションを指定する必要があります。
たとえば、次のコマンドによって、エクスポート可能なマシン レベルの RSA キー コンテナが SampleKeys という名前で作成されます。
aspnet_regiis -pc "SampleKeys"–exp
Web.config ファイルの configProtectedData セクションを次の例に示します。このセクションで、SampleKeys という名前のマシン レベルの RSA キー コンテナを使用する RsaProtectedConfigurationProvider を指定します。
<configProtectedData>
<providers>
<add name="SampleProvider"
type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
processorArchitecture=MSIL"
keyContainerName="SampleKeys"
useMachineContainer="true" />
</providers>
</configProtectedData>
メモ : |
---|
プロテクト構成セクションの暗号化キーと復号化キーが誤って削除されないように保護するために、.NET Framework をアンインストールするときに RSA キー コンテナを削除しません。 |
RSA キー コンテナへのアクセス権限の付与
既定では、RSA キー コンテナは、インストール先のサーバーの NTFS アクセス制御リスト (ACL: Access Control List) によって厳密に保護されています。これにより、暗号化キーにアクセスできるユーザーが制約され、暗号化された情報のセキュリティが強化されます。
ASP.NET で RSA キー コンテナを使用できるようにするには、ASP.NET アプリケーションのプロセス ID が承認されて、目的の RSA キー コンテナの読み取りアクセス権限を持っていることが必要です。ASP.NET アプリケーションの ID の設定および確認の方法については、「ASP.NET の偽装」を参照してください。
ASP.NET アプリケーションの ID に RSA キー コンテナの読み取りアクセス許可を付与するには、Aspnet_regiis.exe ツールを -pa スイッチを指定して使用します。たとえば、次のコマンドによって、Windows Server 2003 の NETWORK SERVICE アカウントに、SampleKeys という名前のマシン レベルの RSA キー コンテナの読み取りアクセス権限が付与されます。
aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
メモ : |
---|
RSA キー コンテナがユーザー レベルのコンテナの場合は、そのキーが格納されている Windows プロファイルを持つユーザーとしてログオンする必要があります。また、-pku オプションを指定して、ユーザー レベルの RSA キー コンテナへのアクセス権限を付与する必要があります。詳細については、「コンピュータ レベルの RSA キー コンテナおよびユーザー レベルの RSA キー コンテナについて」を参照してください。 |
マシン構成に指定されている既定の RsaProtectedConfigurationProvider を使用するには、最初にアプリケーションの Windows ID に、既定のプロバイダに対して指定されているキー コンテナである NetFrameworkConfigurationKey というマシン キー コンテナへのアクセス権限を付与する必要があります。たとえば、次のコマンドによって、NETWORK SERVICE アカウントに、既定の RsaProtectedConfigurationProvider で使用する RSA キー コンテナへのアクセス権限が付与されます。
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
NetFrameworkConfigurationKey RSA キー コンテナは、Aspnet_regiis.exe ツールで発行するコマンドの既定のキー コンテナです。このコマンドは、次のようにして発行することもできます。
aspnet_regiis -pa "NT AUTHORITY\NETWORK SERVICE"
RSA キー コンテナのエクスポート
RSA キー コンテナを XML ファイルにエクスポートするには、Aspnet_regiis.exe ツールを –px スイッチを指定して使用します。XML ファイルを RSA キー コンテナのバックアップとして使用したり、XML ファイルを使って RSA キー コンテナを別のサーバーにインポートしたりできます。暗号化された情報を復号化するには、RSA キー コンテナの秘密キー部分が必要です。エクスポートしたキー コンテナを別のサーバー上で使用するには、秘密キーもインポートする必要があります。キーをエクスポートするときに –pri オプションを指定して、秘密キーを XML ファイルに含めることができます。また、エクスポートするキー コンテナがマシン レベルとユーザー レベルのどちらであるかを指定する必要もあります。ユーザー レベルのキー コンテナをエクスポートするには、そのキーが格納されている Windows プロファイルのユーザーとしてログオンする必要があります。ユーザー レベルのキーを指定するには、暗号化キーの情報をエクスポートするときに、-pku オプションを含めます。このオプションを指定しない場合、キーはマシン キー ストアからエクスポートされます。マシン レベルの暗号化キーおよびユーザー レベルの暗号化キーの詳細については、「コンピュータ レベルの RSA キー コンテナおよびユーザー レベルの RSA キー コンテナについて」を参照してください。
たとえば、次のコマンドによって、SampleKeys という名前のマシン レベルの RSA キー コンテナが keys.xml という名前のファイルにエクスポートされ、秘密キーの情報が含められます。
aspnet_regiis -px "SampleKeys" keys.xml -pri
メモ : |
---|
セキュリティ上の理由から、RSA キー コンテナを XML ファイルにエクスポートした後で、XML ファイルをサーバー外部の場所にコピーし、XML ファイルをサーバーから削除します。これにより、攻撃者が RSA キー コンテナにアクセスできる可能性が少なくなります。つまり、RSA キー コンテナを使用して暗号化された Web.config ファイルを復号化できる可能性が減ります。 |
RSA キー コンテナのインポート
XML ファイルから RSA キー コンテナをインポートするには、Aspnet_regiis.exe ツールを –pi スイッチを指定して使用します。また、インポートするキー コンテナがマシン レベルまたはユーザー レベルのどちらのキー コンテナであるかを指定する必要もあります。ユーザー レベルのキー コンテナをインポートするには、そのキーが格納されている Windows プロファイルのユーザーとしてログオンする必要があります。ユーザー レベルのキーを指定するには、暗号化キーの情報をインポートするときに、-pku オプションを含めます。このオプションを指定しない場合、エクスポートされたキーはマシン キー ストアにインポートされます。
たとえば、次のコマンドによって、keys.xml という名前のファイルから SampleKeys という名前のマシン レベルの RSA キー コンテナがインポートされます。
aspnet_regiis -pi "SampleKeys" keys.xml
インポートした RSA キー コンテナを使用する ASP.NET アプリケーションの ID には、その RSA キー コンテナの内容を読み取る権限が付与されている必要があります。詳細については、このトピックの前半の「RSA キー コンテナへのアクセス権限の付与」を参照してください。
RSA キー コンテナの削除
RSA キー コンテナを削除するには、Aspnet_regiis.exe ツールを –pz スイッチを指定して使用します。RSA キー コンテナを削除する前に、後でインポートできるように XML ファイルにそのキーをエクスポートしているか、また、その RSA キー コンテナを使用して暗号化され、復号化が必要となる情報がないかを確認します。
RSA キー コンテナを削除するときには、キー コンテナの名前を指定し、さらにそのコンテナがマシン レベルとユーザー レベルのどちらであるかを示す必要があります。ユーザー レベルのキー コンテナを削除するには、そのキーが格納されている Windows プロファイルのユーザーとしてログオンする必要があります。
たとえば、次のコマンドによって、SampleKeys という名前のマシン レベルの RSA キー コンテナが削除されます。
aspnet_regiis -pz "SampleKeys"
参照
処理手順
チュートリアル : RSA キー コンテナの作成とエクスポート