DetailPage-MSS-KB

기술 자료

기술 자료: 313091 - 마지막 검토: 2007년 10월 29일 월요일 - 수정: 3.8

이 페이지에서

요약

이 문서에서는 Forms 인증 쿠키 데이터의 암호화, 해독, 유효성 검사에 사용할 키를 만드는 방법을 설명합니다. 이 문서에서 만든 키를 Machine.config 파일과 Web.config 파일의 <system.web> 요소에 있는 <machineKey> 섹션의 validationKeydecryptionKey 특성에 사용할 수 있습니다.

요구 사항

다음 목록은 권장하는 하드웨어, 소프트웨어, 네트워크 인프라 및 서비스 팩입니다.
  • Microsoft Windows 2000 또는 Microsoft Windows XP
  • Microsoft .NET Framework
  • Microsoft Internet Information Services(IIS)

프로젝트 만들기

  1. Microsoft Visual Studio .NET을 시작합니다.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 누릅니다.
  3. 프로젝트 형식 영역에서 Visual Basic 프로젝트를 누릅니다.
  4. 템플릿 영역에서 콘솔 응용 프로그램을 누릅니다.
  5. 이름 텍스트 상자에 HashConfigVb를 입력한 다음 확인을 누릅니다.

암호를 해시할 코드 작성

이 절에 나와 있는 코드는 명령줄에서 전달된 다음 두 개의 인수를 읽습니다.
  • 첫 번째 인수는 decryptionKey 특성을 만드는 데 사용되는 바이트 수입니다.
  • 두 번째 인수는 validationKey 특성을 만드는 데 사용되는 바이트 수입니다.
코드는 난수 생성기를 사용하여 명령줄 인수에 따라 임의의 수의 바이트를 만듭니다. 임의의 바이트를 만든 후에는 .config 파일에서 사용하기에 적절한 16진수 문자열로 바이트의 서식이 지정됩니다.

참고 명령줄에서 전달되는 값 크기의 두배에 해당하는 16진수 문자열이 만들어집니다. 예를 들어, 키에 24바이트를 지정하면 변환 후 만들어진 문자열 길이는 48바이트가 됩니다. decryptionKey의 유효한 값은 8 또는 24입니다. 이것은 각각 데이터 암호화 표준(DES)에 대해 16바이트 키를 만들거나 삼중 DES에 대해 48바이트 키를 만듭니다. validationKey의 유효한 값은 20-64입니다. 이것은 변환 후 40-128바이트 길이의 키를 만듭니다. 코드의 출력은 Machine.config 파일이나 Web.config 파일로 복사하여 붙여넣을 수 있는 <machineKey> 요소 전체입니다.

  1. KeyCreator라는 이름의 새 클래스 파일을 Visual Basic 프로젝트에 추가합니다.
  2. KeyCreator.vb 파일의 기존 코드를 다음 코드로 대체합니다.
    Imports System
    Imports System.Text
    Imports System.Security.Cryptography
    
    Namespace Crypto
      Public Class KeyCreator
    	
        Public Shared Sub CreateMachineKey()
          Dim commandLineArgs As String()
          commandLineArgs = System.Environment.GetCommandLineArgs()
    
          Dim decryptionKey As String
          decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs(1)))
          Dim validationKey As String
          validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs(2)))
    
          Console.WriteLine("<machineKey validationKey=""{0}"" decryptionKey=""{1}"" validation=""SHA1""/>", _
          validationKey, decryptionKey)
         End Sub
    
         Public Shared Function CreateKey(numBytes As Integer) As String
           Dim rng As RNGCryptoServiceProvider = New RNGCryptoServiceProvider()
           Dim buff(numBytes -1) As Byte
    
           rng.GetBytes(buff)
    				
           Return BytesToHexString(buff)
         End Function
     
         Public Shared Function BytesToHexString(bytes As Byte()) As String
           Dim hexString As StringBuilder = New StringBuilder(64)
           Dim counter as Integer
    
           For counter = 0 To bytes.Length - 1
             hexString.Append(String.Format("{0:X2}", bytes(counter)))
           Next
    
           Return hexString.ToString()
        End Function
    
      End Class
    End Namespace
    					
  3. 기본적으로 만들어지는 Module1.vb 파일을 연 후 Main 서브루틴에 다음 코드를 추가합니다.
        Dim MyKeyCreator As New Crypto.KeyCreator()
        MyKeyCreator.CreateMachineKey()
    					
  4. 응용 프로그램을 빌드합니다.

해시 생성

명령줄에서 응용 프로그램을 실행한 다음 해독 키와 유효성 검사 키의 크기에 해당하는 두 개의 정수 값을 전달합니다. 콘솔 응용 프로그램에 HashConfigVb.exe라는 이름을 지정한 경우에는 응용 프로그램의 Bin 디렉터리에서 명령줄에 다음 구문을 입력합니다.
HashConfigVb.exe 24 64
응용 프로그램이 아래와 비슷한 출력을 반환합니다.
<machineKey validationKey="08CE6B478DCE73..........E566D8AC5D1C045BA60"
            decryptionKey="4252D6B2268.........67F451CE65D0F2ABE9BCD3A"
            validation="SHA1"/>
					
참고 코드가 난수 생성기를 사용하므로 매번 출력이 달라집니다.

구성 파일 업데이트

  1. Machine.config 파일이나 Web.config 파일을 찾습니다.
  2. 구성 파일에서 <system.web> 섹션을 찾습니다.
  3. <machineKey> 섹션을 콘솔 응용 프로그램의 출력으로 대체합니다. <machineKey> 섹션이 없으면 새로 만듭니다.
  4. 구성 파일을 저장합니다.
  5. 웹 그룹의 모든 서버에서 IIS를 다시 시작하여 Machine.config 변경 사항이 반영되도록 합니다.

문제 해결

다음 시나리오의 경우 <machineKey> 섹션이 웹 그룹 간에 동일한 명시적 키를 갖고 있는지(즉, <machineKey> 섹션의 특성에 대해 AutoGenerate 옵션을 사용하지 않음) 확인하십시오.
  • Forms 인증을 사용하는 경우
  • StateServer 모드에서 세션 상태를 실행하는 경우
  • 기본적으로 enableViewStateMAC 특성이 True로 설정되어 있기 때문에 웹 그룹 간에 ViewState를 사용할 수 있게 하려는 경우

참조

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
308157  (http://support.microsoft.com/kb/308157/ ) Visual Basic .NET을 사용하여 ASP .NET 응용 프로그램에서 폼 기반 인증을 구현하는 방법
306238  (http://support.microsoft.com/kb/306238/ ) Visual Basic .NET을 사용하여 ASP.NET 응용 프로그램에서 폼 기반 인증을 가진 역할 기반 보안을 구현하는 방법
306590  (http://support.microsoft.com/kb/306590/ ) INFO: ASP.NET 보안 개요
307626  (http://support.microsoft.com/kb/307626/ ) INFO: ASP.NET 구성 개요




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹 (http://support.microsoft.com/newsgroups/default.aspx) 에 참여하시기 바랍니다.

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
키워드: 
kbproductlink kbconfig kbhowtomaster kbsecurity kbstate KB313091
공유
추가 지원 옵션
Microsoft Community 지원 포럼
직접 문의하기
Microsoft Certified Partner 찾기
Microsoft Store
소기업이 아닙니까?
다음에서 팔로우하십시오.