보호되는 구성 RSA 키 컨테이너 가져오기 및 내보내기

Visual Studio 2010

업데이트: 2007년 11월

보호되는 구성에서는 RsaProtectedConfigurationProvider를 사용할 때 RSA 키 컨테이너의 만들기, 삭제, 가져오기 및 내보내기 기능을 제공합니다. 이러한 기능은 암호화된 동일한 Web.config 파일이 여러 서버에 배포되는 웹 팜의 경우 유용합니다. 이 경우 동일한 RSA 키 컨테이너도 해당 서버에 배포되어야 합니다. 이를 위해 응용 프로그램에 대한 RSA 키 컨테이너를 만들고 이를 XML 파일로 내보낸 후 암호화된 Web.config 파일을 해독해야 하는 각 서버에서 이를 가져옵니다.

RSA 키 컨테이너를 만드는 것은 여러 ASP.NET 응용 프로그램을 호스팅하는 단일 웹 서버에도 유용할 수 있습니다. 단일 고객의 각 응용 프로그램 또는 각 응용 프로그램 집합에 대해 RSA 키 컨테이너를 만들면 다른 응용 프로그램의 RSA 키 컨테이너를 사용하여 특정 응용 프로그램에 대한 Web.config 파일을 암호 해독할 수 없으므로 응용 프로그램의 중요 구성 정보를 효과적으로 보호할 수 있습니다.

RSA 키 컨테이너를 만들려면 ASP.NET IIS 등록 도구(Aspnet_regiis.exe)를 –pc 스위치와 함께 사용합니다. 키 컨테이너에 이름을 지정해야 하며, 이 이름은 응용 프로그램에 대한 Web.config 파일의 configProtectedData 섹션에 지정된 RsaProtectedConfigurationProvider에서 사용되는 키 컨테이너를 식별합니다. 새로 만든 RSA 키 컨테이너를 내보낼 수 있도록 하려면 -exp 옵션을 사용해야 합니다.

예를 들어 다음 명령은 내보내기를 수행할 수 있는 컴퓨터 수준의 키 컨테이너인 SampleKeys라는 이름의 RSA 키 컨테이너를 만듭니다.

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>
yxw286t2.alert_note(ko-kr,VS.100).gif참고:

보호되는 구성 섹션에 대한 암호화 및 해독 키가 실수로 삭제되는 경우를 방지하기 위해 .NET Framework를 제거하더라도 RSA 키 컨테이너는 삭제되지 않습니다.

기본적으로 RSA 키 컨테이너는 해당 컨테이너가 설치된 서버의 NTFS ACL(액세스 제어 목록)에 의해 철저히 보호됩니다. 암호화 키를 액세스할 수 있는 사용자를 제한하여 암호화된 정보의 보안을 강화합니다.

ASP.NET에서 RSA 키 컨테이너를 사용하려면 먼저 ASP.NET 응용 프로그램의 프로세스 ID에 해당 RSA 키 컨테이너에 대한 읽기 권한을 부여해야 합니다. ASP.NET 응용 프로그램의 ID 설정 및 확인에 대한 자세한 내용은 ASP.NET 가장을 참조하십시오.

Aspnet_regiis.exe 도구를 -pa 스위치와 함께 사용하면 RSA 키 컨테이너에 대한 읽기 권한을 ASP.NET 응용 프로그램의 ID에 부여할 수 있습니다. 예를 들어 다음 명령은 SampleKeys라는 이름의 컴퓨터 수준 RSA 키 컨테이너에 대한 읽기 권한을 Windows 2003 Server NETWORK SERVICE 계정에 부여합니다.

aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
yxw286t2.alert_note(ko-kr,VS.100).gif참고:

RSA 키 컨테이너가 사용자 수준의 컨테이너인 경우 사용자 수준 RSA 키 컨테이너에 대한 액세스 권한을 부여하려면 이 키가 저장된 Windows 프로필을 소유하는 사용자로 로그온하고 -pku 옵션을 사용해야 합니다. 자세한 내용은 컴퓨터 수준 및 사용자 수준 RSA 키 컨테이너 이해를 참조하십시오.

컴퓨터 구성에 지정된 기본 RsaProtectedConfigurationProvider를 사용하려면 먼저 NetFrameworkConfigurationKey라는 컴퓨터 키 컨테이너에 대한 액세스 권한을 응용 프로그램의 Windows ID에 부여해야 합니다. 이 컨테이너는 기본 공급자에 대해 지정된 키 컨테이너입니다. 예를 들어 다음 명령은 기본 RsaProtectedConfigurationProvider에서 사용되는 RSA 키 컨테이너에 대한 액세스 권한을 NETWORK SERVICE 계정에 부여합니다.

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

NetFrameworkConfigurationKey RSA 키 컨테이너는 Aspnet_regiis.exe 도구에서 발생되는 명령의 기본 키 컨테이너입니다. 따라서 앞의 명령을 다음과 같이 발생할 수도 있습니다.

aspnet_regiis -pa "NT AUTHORITY\NETWORK SERVICE"

RSA 키 컨테이너를 XML 파일로 내보내려면 Aspnet_regiis.exe 도구를 –px 스위치와 함께 사용할 수 있습니다. 이 XML 파일은 RSA 키 컨테이너에 대한 백업으로 사용하거나 다른 서버에서 RSA 키 컨테이너를 가져오기 위해 사용할 수 있습니다. 암호화된 정보를 해독하려면 RSA 키 컨테이너의 개인 키 부분이 필요합니다. 내보낸 키 컨테이너를 다른 서버에서 사용하려면 개인 키도 가져와야 합니다. 키를 내보낼 때 –pri 옵션을 지정하면 개인 키를 XML 파일에 포함시킬 수 있습니다. 또한 사용자는 내보낸 키 컨테이너가 컴퓨터 수준인지, 사용자 수준인지 지정해야 합니다. 사용자 수준의 키 컨테이너를 내보내려면 이 키가 저장된 Windows 프로필을 소유하는 사용자로 로그온해야 합니다. 사용자 수준의 키를 지정하려면 암호화 키 정보를 내보낼 때 -pku 옵션을 포함시키십시오. 그렇지 않으면 컴퓨터 키 저장소에 있는 키가 내보내집니다. 컴퓨터 수준 및 사용자 수준의 암호화 키에 대한 자세한 내용은 컴퓨터 수준 및 사용자 수준 RSA 키 컨테이너 이해를 참조하십시오.

예를 들어 다음 명령은 SampleKeys라는 이름의 컴퓨터 수준 RSA 키 컨테이너를 keys.xml이라는 이름의 파일로 내보내고 개인 키 정보를 포함시킵니다.

aspnet_regiis -px "SampleKeys" keys.xml -pri
yxw286t2.alert_note(ko-kr,VS.100).gif참고:

보안을 위해 RSA 키 컨테이너를 XML 파일로 내보낸 후 XML 파일을 서버 외부의 위치로 복사하고 서버에서 XML 파일을 삭제하십시오. 이렇게 하면 공격자가 RSA 키 컨테이너에 액세스할 기회가 감소하므로 해당 RSA 키 컨테이너를 사용하여 암호화된 Web.config 파일의 해독 가능성도 줄어듭니다.

Aspnet_regiis.exe 도구를 –pi 스위치와 함께 사용하면 XML 파일에서 RSA 키 컨테이너를 가져올 수 있습니다. 또한 사용자는 가져올 키 컨테이너가 컴퓨터 수준 또는 사용자 수준 키 컨테이너인지 지정해야 합니다. 사용자 수준의 키 컨테이너를 가져오려면 이 키가 저장된 Windows 프로필을 소유하는 사용자로 로그온해야 합니다. 사용자 수준의 키를 지정하려면 암호화 키를 가져올 때 -pku 옵션을 포함시키십시오. 그렇지 않으면 내보낸 키를 컴퓨터 키 저장소로 가져오게 됩니다.

예를 들어 다음 명령은 keys.xml이라는 이름의 파일에서 SampleKeys라는 이름의 컴퓨터 수준 RSA 키 컨테이너를 가져옵니다.

aspnet_regiis -pi "SampleKeys" keys.xml

가져온 RSA 키 컨테이너를 사용하려는 ASP.NET 응용 프로그램의 ID에는 해당 RSA 키 컨테이너의 내용을 읽을 수 있는 권한이 부여되어야 합니다. 자세한 내용은 이 항목 앞 부분의 를 참조하십시오.

RSA 키 컨테이너를 삭제하려면 Aspnet_regiis.exe 도구를 –pz 스위치와 함께 사용할 수 있습니다. 이 키를 나중에 다시 가져올 수 있도록 XML 파일로 내보냈는지, 또는 RSA 키 컨테이너로 암호화되어 암호 해독이 필요한 정보가 없는지 확인한 후 RSA 키 컨테이너를 삭제하십시오.

RSA 키 컨테이너를 삭제할 때는 키 컨테이너의 이름을 지정하고 컨테이너가 컴퓨터 수준인지 또는 사용자 수준인지 구분해야 합니다. 사용자 수준의 키 컨테이너를 삭제하려면 이 키가 저장된 Windows 프로필을 소유하는 사용자로 로그온해야 합니다.

예를 들어 다음 명령은 SampleKeys라는 이름의 컴퓨터 수준 RSA 키 컨테이너를 삭제합니다.

aspnet_regiis -pz "SampleKeys"
표시: