방법: 보호되는 구성 공급자 예제 빌드 및 실행

Visual Studio 2010

업데이트: 2007년 11월

이 단원의 항목에는 보호되는 구성 공급자 예제에 대한 코드가 포함되어 있습니다. 이 예제 공급자에서는 TripleDESCryptoServiceProvider 클래스를 사용하여 Web.config 파일의 구성 섹션을 암호화하고 해독합니다.

이 항목에서는 예제를 빌드하고 예제 공급자를 사용하도록 ASP.NET 응용 프로그램을 구성하는 방법에 대해 설명합니다. 보호되는 구성 공급자 예제는 Visual Basic 및 C#에 제공되었으며 보호되는 구성 공급자 구현 예제 단원에 나옵니다.

Aspnet_regiis.exe 도구를 사용하여 Web.config 파일 섹션을 암호화해야 합니다. 암호 해독 작업은 Aspnet_regiis.exe 도구를 사용하여 명시적으로 또는 런타임에 ASP.NET에서 자동으로 수행할 수 있습니다. 따라서 Aspnet_regiis.exe 도구와 ASP.NET에서 모두 예제 공급자 형식을 사용할 수 있도록 해야 합니다. 이렇게 하려면 강력한 이름을 사용하여 공급자를 컴파일한 다음 GAC(전역 어셈블리 캐시)에 추가하면 됩니다.

33ws57y0.alert_note(ko-kr,VS.100).gif참고:

강력한 이름 도구(Sn.exe)와 전역 어셈블리 캐시 도구(Gacutil.exe)는 Windows SDK(소프트웨어 개발 키트) 설치 시 함께 제공됩니다. 자세한 내용은 강력한 이름 도구(Sn.exe)전역 어셈블리 캐시 도구(Gacutil.exe)를 참조하십시오.

예제 공급자를 빌드하려면

  1. Windows 명령줄에서 다음 명령을 실행합니다.

    Sn.exe -k keys.snk
    

    이렇게 하면 강력한 이름 키 쌍이 생성됩니다.

    33ws57y0.alert_note(ko-kr,VS.100).gif참고:

    명령을 실행할 수 없는 경우에는 해당 명령을 실행하기 전에 PATH 변수에 .NET Framework 경로를 추가해야 합니다. Windows에서 내 컴퓨터를 마우스 오른쪽 단추로 클릭하고 속성, 고급 탭, 환경 변수 단추를 차례로 클릭합니다. 그런 다음 시스템 변수 목록에서 Path 변수를 두 번 클릭하고 변수 값 텍스트 상자에서 기존 값의 끝에 세미콜론(;)을 추가한 후 .NET Framework 설치 경로를 입력합니다. 일반적으로 .NET Framework는 Windows 설치 폴더의 \Microsoft.NET\Framework\versionNumber에 설치됩니다.

  2. TripleDESProtectedConfigurationProvider(사용 중인 프로그래밍 언어에 따라 .vb 또는 .cs 확장명 사용)라는 프로그램 파일을 만든 다음 보호되는 구성 공급자 구현 예제 단원의 예제 공급자 코드에 복사합니다.

  3. 다음 명령을 사용하여 공급자 예제 코드를 컴파일하고 결과 어셈블리에 강력한 이름 키를 할당합니다.

    vbc /out:TripleDESProtectedConfigurationProvider.dll /t:library TripleDESProtectedConfigurationProvider.vb /r:System.Configuration.dll /keyfile:keys.snk
    

    csc /out:TripleDESProtectedConfigurationProvider.dll /t:library TripleDESProtectedConfigurationProvider.cs /r:System.Configuration.dll /keyfile:keys.snk
    
  4. 다음 명령줄 명령을 사용하여 전역 어셈블리 캐시에 어셈블리를 설치합니다.

    gacutil.exe -i TripleDESProtectedConfigurationProvider.dll
    
    33ws57y0.alert_note(ko-kr,VS.100).gif참고:

    GAC에서 어셈블리를 제거해야 하는 경우 다음 명령으로 Gacutil.exe 도구를 사용할 수 있습니다.

    gacutil.exe -u TripleDESProtectedConfigurationProvider
    

보호되는 구성 공급자 예제 TripleDES는 텍스트 파일에 16진수 문자열로 저장된 암호화 키를 사용하여 구성 섹션을 암호화하고 해독합니다. 예제 공급자에 포함된 코드를 사용하여 키 파일을 만들 수 있습니다. 다음 예제와 같이 키 파일의 첫 번째 줄에 키가 저장되고 두 번째 줄에 벡터(IV)가 저장됩니다.

EBBCB17E444EBB9EA2EA7EE3E0FD9E108C6E75A90101D017
8C979426981FD2A6

키 파일을 만든 후에는 서버의 안전한 위치에 저장한 다음 키 파일에 대한 파일 액세스를 ASP.NET 응용 프로그램 ID, SYSTEM 계정 및 관리자로 제한해야 합니다. 이렇게 하면 공격자가 키에 액세스하여 암호화를 렌더링해도 소용 없도록 보호할 수 있습니다.

암호화 키를 만들려면

  1. CreateKey라는 콘솔 응용 프로그램을 만듭니다.

  2. 다음 코드를 응용 프로그램의 주 모듈로 복사합니다.

    Imports System
    Imports Samples.AspNet.ProtectedConfiguration
    
    Public Class CreateKey
        Public Shared Sub Main(args() As String)
        Dim filePath As String = args(0)
        Dim provider As TripleDESProtectedConfigurationProvider = _
            New TripleDESProtectedConfigurationProvider()
        provider.CreateKey(filePath)
        Console.WriteLine("New TripleDES key written to '{0}'", filePath)
      End Sub
    End Class
    

    using System;
    using Samples.AspNet.ProtectedConfiguration;
    public class CreateKey
    {
        public static void Main(string[] args)
        {
            string filePath = args[0];
            TripleDESProtectedConfigurationProvider provider = 
                new TripleDESProtectedConfigurationProvider();
            provider.CreateKey(filePath);
            Console.WriteLine("New TripleDES Key written to '{0}'", filePath);
        }
    }
    

    보호되는 구성 공급자 예제에는 CreateKey라는 공용 메서드가 포함되어 있습니다. 이 메서드는 파일 경로를 입력으로 사용하고 새 키를 생성한 다음 이 키를 지정된 파일에 작성합니다. 콘솔 응용 프로그램의 코드는 보호되는 구성 공급자의 인스턴스를 만들고 CreateKey 메서드를 호출합니다. 이 코드에서는 파일 경로를 명령줄 인수로 사용하고 지정된 위치에 새 키 파일을 만듭니다.

  3. Windows 명령줄에서 다음과 같은 구문을 사용하여 콘솔 응용 프로그램을 실행합니다.

    CreateKey "c:\WebSites\SampleApplication\App_Data\Keys.txt"
    

공급자를 컴파일하고 암호화 키를 만든 후에는 이 공급자를 사용하도록 ASP.NET 응용 프로그램을 구성할 수 있습니다.

ASP.NET 응용 프로그램에서 예제 공급자를 사용하려면

  1. 웹 사이트의 Web.config 파일을 엽니다. 응용 프로그램에 Web.config 파일이 없으면 웹 사이트의 루트 폴더에 Web.config라는 텍스트 파일을 만들어 다음 요소를 추가합니다.

    <?xml version="1.0"?>
    <configuration>
      <system.web>
      
      </system.web>
    </configuration>
    
  2. configuration 섹션(system.web 요소의 피어로) 내에 아래의 강조 표시된 요소를 추가합니다.

    <configuration>
       <configProtectedData>     <providers>       <add name="TripleDESProvider"       type="Samples.AspNet.ProtectedConfiguration.TripleDESProtectedConfigurationProvider,                  TripleDESProtectedConfigurationProvider,                  Version=0.0.0.0, CultureInfo=neutral,                  PublicKeyToken=a5a9eb4fc5306403,                  processorArchitecture=MSIL"            keyFilePath="c:\WebSites\SampleApplication\App_Data\Keys.txt" />     </providers>   </configProtectedData>
    </configuration>
    
    33ws57y0.alert_note(ko-kr,VS.100).gif참고:

    앞에서 만든 키 파일을 저장한 위치와 일치하도록 keyFilePath 특성의 값을 변경하십시오.

  3. configuration 섹션 내에 <connectionStrings> 섹션과 하나 이상의 연결 문자열을 추가합니다.

    다음 예제에서는 SQL Server Northwind 샘플 데이터베이스에 대한 연결 문자열이 포함된 connectionStrings 섹션을 보여 줍니다. SQL Server 인스턴스 이름은 SampleSQLServer로 간주됩니다.

    <connectionStrings>
      <add name="NorthwindConnectionString" 
        connectionString="Data Source=SampleSQLServer;Initial Catalog=Northwind;Persist Security Info=True;" Integrated Security=SSPI;"
        providerName="System.Data.SqlClient" />
    </connectionStrings>
    
    33ws57y0.alert_note(ko-kr,VS.100).gif참고:

    사용할 SQL Server 데이터베이스에 대한 연결 정보를 포함하도록 connectionString 값을 변경하십시오.

  4. 파일을 저장한 다음 닫습니다.

  5. Windows 명령줄에서 다음 명령을 실행하여 Web.config 파일의 connectionStrings 섹션을 암호화합니다.

    aspnet_regiis.exe -pe "connectionStrings" -app "/SampleApplication" -prov "TripleDESProvider"
    
    33ws57y0.alert_note(ko-kr,VS.100).gif참고:

    SampleApplication의 경우 암호화를 테스트할 웹 응용 프로그램의 이름으로 대체하십시오.

  6. Web.config 파일을 열고 연결 문자열이 암호화되었음을 확인합니다.

  7. 웹 응용 프로그램에서 암호화된 연결 문자열을 사용합니다.

    예를 들어 다음 예제와 같이 SqlDataSource 컨트롤을 추가하고 ConnectionString 속성을 "NorthwindConnectionString"으로 설정합니다.

    <asp:SqlDataSource ID="SqlDataSource1" 
      runat="server" 
      ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
      SelectCommand="SELECT ProductName FROM Products">
    </asp:SqlDataSource>
    
  8. 컨트롤(예: GridView 컨트롤)을 SqlDataSource 컨트롤에 바인딩합니다.

  9. 페이지를 실행합니다.

    데이터가 제대로 표시되는지 확인하십시오. ASP.NET에서는 연결 문자열을 사용하여 Northwind 데이터베이스에 연결하기 전에 런타임에 이 연결 문자열을 해독했습니다.

표시: