보호되는 구성 개요
업데이트: 2007년 11월
보호되는 구성을 사용하여 사용자 이름과 암호, 데이터베이스 연결 문자열, 암호화 키 등 중요한 정보를 웹 응용 프로그램 구성 파일(예: Web.config 파일)에 암호화할 수 있습니다. 구성 정보를 암호화하면 공격자가 구성 파일에 액세스하더라도 중요한 정보에는 액세스할 수 없도록 하여 응용 프로그램의 보안을 향상시킬 수 있습니다.
다음 예제와 같이 데이터베이스에 연결하는 데 사용할 연결 문자열을 지정하는 섹션이 암호화되지 않은 구성 파일에 포함될 수 있습니다.
<configuration>
<connectionStrings>
<add name="SampleSqlServer" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
</connectionStrings>
</configuration>
보호되는 구성을 사용하여 연결 문자열 값을 암호화하는 구성 파일에는 연결 문자열이 일반 텍스트로 표시되지 않고 암호화된 형식으로 저장됩니다. 다음 예제를 참조하십시오.
<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>RXO/zmmy3sR0iOJoF4ooxkFxwelVYpT0riwP2mYpR3FU+r6BPfvsqb384pohivkyNY7Dm4lPgR2bE9F7k6TblLVJFvnQu7p7d/yjnhzgHwWKMqb0M0t0Y8DOwogkDDXFxs1UxIhtknc+2a7UGtGh6Di3N572qxdfmGfQc7ZbwNE=
</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>KMNKBuV9nOid8pUvdNLY5I8R7BaEGncjkwYgshW8ClKjrXSM7zeIRmAy/cTaniu8Rfk92KVkEK83+UlQd+GQ6pycO3eM8DTM5kCyLcEiJa5XUAQv4KITBNBN6fBXsWrGuEyUDWZYm6Eijl8DqRDb11i+StkBLlHPyyhbnCAsXdz5CaqVuG0obEy2xmnGQ6G3Mzr74j4ifxnyvRq7levA2sBR4lhE5M80Cd5yKEJktcPWZYM99TmyO3KYjtmRW/Ws/XO3z9z1b1KohE5Ok/YX1YV0+Uk4/yuZo0Bjk+rErG505YMfRVtxSJ4ee418ZMfp4vOaqzKrSkHPie3zIR7SuVUeYPFZbcV65BKCUlT4EtPLgi8CHu8bMBQkdWxOnQEIBeY+TerAee/SiBCrA8M/n9bpLlRJkUb+URiGLoaj+XHym//fmCclAcveKlba6vKrcbqhEjsnY2F522yaTHcc1+wXUWqif7rSIPhc0+MT1hB1SZjd8dmPgtZUyzcL51DoChy+hZ4vLzE=
</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
페이지가 요청되면 .NET Framework에서는 연결 문자열 정보를 해독하여 응용 프로그램에서 사용할 수 있도록 합니다.
참고: |
---|
보호되는 구성은 구성 파일의 configProtectedData 섹션을 암호화하는 데 사용할 수 없습니다. 또한 섹션 처리기를 사용하지 않는 구성 섹션 또는 관리되는 암호화 구성의 일부인 섹션을 암호화하는 데 사용할 수도 없습니다. 보호되는 구성을 사용하여 암호화할 수 없는 구성 섹션에는 processModel, runtime, mscorlib, startup, system.runtime.remoting, configProtectedData, satelliteassemblies, cryptographySettings, cryptoNameMapping 및 cryptoClasses 등이 있습니다. ASP.NET의 레지스트리 설정 콘솔 응용 프로그램(Aspnet_setreg.exe) 도구처럼 중요한 정보를 암호화하는 다른 방법을 사용하여 이러한 구성 섹션에 있는 중요한 정보를 보호하는 것이 좋습니다. ASP.NET의 레지스트리 설정 콘솔 응용 프로그램(Aspnet_setreg.exe)에 대한 내용은 Microsoft 고객 기술 지원 웹 사이트에서 Microsoft 기술 자료 문서 Q329290 "ASP.NET 유틸리티를 사용하여 자격 증명 및 세션 상태 연결 문자열을 암호화하는 방법"을 참조하십시오. |
보안 정보: |
---|
암호화된 구성 정보는 응용 프로그램에서 사용하는 메모리에 로드될 때 해독됩니다. 응용 프로그램의 메모리가 손상되면 보호되는 구성 섹션에 포함된 중요한 정보도 손상될 수 있습니다. |
보호되는 구성 작업
ASP.NET IIS 등록 도구(Aspnet_regiis.exe) 또는 System.Configuration 네임스페이스의 보호되는 구성 클래스를 사용하여 보호되는 구성을 관리합니다.
%SystemRoot%\Microsoft.NET\Framework\versionNumber 폴더에 있는 Aspnet_regiis.exe 도구에는 Web.config 파일의 섹션 암호화 및 해독, 키 컨테이너 만들기 또는 삭제, 키 컨테이너 정보 가져오기 및 내보내기, 키 컨테이너에 대한 액세스 관리 등의 작업을 수행할 수 있는 옵션이 포함되어 있습니다.
Web.config 파일의 내용을 암호화하고 해독하는 작업은 ProtectedConfigurationProvider 클래스를 사용하여 수행됩니다. 다음 목록에서는 .NET Framework에 포함된 보호되는 구성 공급자에 대해 설명합니다.
DpapiProtectedConfigurationProvider. Windows DPAPI(데이터 보호 API)를 사용하여 데이터를 암호화하고 해독합니다.
RsaProtectedConfigurationProvider. RSA 암호화 알고리즘을 사용하여 데이터를 암호화하고 해독합니다.
두 공급자 모두 강력한 데이터 암호화를 제공하지만 웹 팜처럼 암호화된 구성 파일 하나를 여러 서버에서 사용하려는 경우, 데이터를 암호화하는 데 사용된 암호화 키를 내보내고 다른 서버에서 이 암호화 키를 가져오려면 RsaProtectedConfigurationProvider만 사용할 수 있습니다.
사용할 ProtectedConfigurationProvider를 응용 프로그램의 Web.config 파일에 구성하여 지정하거나, Machine.config 파일에 구성된 ProtectedConfigurationProvider 인스턴스 중 하나를 사용할 수 있습니다. 자세한 내용은 보호되는 구성 공급자 지정을 참조하십시오.
사용할 공급자를 지정한 후에는 응용 프로그램에 대한 Web.config 파일의 내용을 암호화하거나 해독할 수 있습니다. 자세한 내용은 구성 섹션 암호화 및 해독을 참조하십시오.
참고: |
---|
웹 응용 프로그램의 보안을 유지하려면 Microsoft Windows 및 IIS(인터넷 정보 서비스)에 대한 최신 보안 패치뿐만 아니라 Microsoft SQL Server나 다른 멤버 자격 데이터 소스에 대한 모든 보안 패치를 사용하여 응용 프로그램 서버를 항상 최신 상태로 유지하는 것이 중요합니다. 보안 코드 작성 및 응용 프로그램 보안을 위한 최선의 구현 방법을 보려면 Michael Howard와 David LeBlanc가 공동 저술한 "Writing Secure Code"의 내용과 Microsoft Patterns and Practices 웹 사이트에서 제공하는 지침을 참조하십시오. |