Visual C# .NET을 사용하여 폼 인증에서 사용할 키를 만드는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 312906 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

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


요구 사항

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

프로젝트 만들기

Visual C# .NET 콘솔 응용 프로그램을 만듭니다.
  1. Visual Studio .NET을 시작합니다.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 누릅니다.
  3. 프로젝트 형식에서 Visual C# 프로젝트를 누릅니다.
  4. 템플릿에서 콘솔 응용 프로그램을 누릅니다.
  5. 프로젝트 이름을 HashConfigCs로 지정합니다.
  6. 확인을 누릅니다.

키를 생성하는 코드 작성

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

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

다음 코드를 .cs 파일에 추가합니다.
using System;
using System.Text;
using System.Security.Cryptography;

namespace Crypto
{
    public class KeyCreator
    {
        public static void Main(String[] args)
        {			
            String[] commandLineArgs = System.Environment.GetCommandLineArgs();
            string decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs[1]));
            string validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs[2]));

            Console.WriteLine("<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\"/>", validationKey, decryptionKey);
        }	

        static String CreateKey(int numBytes) 
        {
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            byte[] buff = new byte[numBytes];

            rng.GetBytes(buff);
            return BytesToHexString(buff);
        }

        static String BytesToHexString(byte[] bytes) 
        {
            StringBuilder hexString = new StringBuilder(64);

            for (int counter = 0; counter < bytes.Length; counter++) 
            {
                hexString.Append(String.Format("{0:X2}", bytes[counter]));
            }
            return hexString.ToString();
        }
    }
}
				

해시 생성

이제 응용 프로그램을 컴파일할 수 있습니다.

해독 키와 유효성 검사 키의 크기에 해당하는 두 개의 정수 값을 전달하여 명령 프롬프트에서 응용 프로그램을 실행합니다. 예를 들어, 콘솔 응용 프로그램에 HashConfigCs.exe라는 이름을 지정한 경우에는 응용 프로그램의 Bin\debug 디렉터리의 명령줄에서 다음 구문을 입력합니다.
hashconfigcs.exe 24 64
응용 프로그램이 아래와 비슷한 출력을 반환합니다.
<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B" decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77" validation="SHA1"/>
참고 코드가 난수 생성기를 사용하므로 매번 출력이 달라집니다.


구성 파일 업데이트

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

문제 해결

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

추가 정보

machineKey 섹션은 다음 경우의 웹 팜과 같아야 합니다.
  • 폼 인증을 사용하는 경우
  • StateServer 모드에서 세션 상태를 실행하는 경우
  • enableViewStateMac이 기본적으로 설정되어 있기 때문에 웹 팜 간에 viewstate를 사용할 수 있게 하려는 경우

참조

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
301240 C# .NET을 사용하여 ASP.NET 응용 프로그램에서 폼 기반 인증을 구현하는 방법
311495 Visual C# .NET을 사용하여 ASP.NET 응용 프로그램에서 폼 기반 인증을 가진 역할 기반 보안을 구현하는 방법
306590 INFO: ASP.NET 보안 개요
307626 INFO: ASP.NET 구성 개요




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 312906 - 마지막 검토: 2005년 8월 11일 목요일 - 수정: 3.9
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
키워드:?
kbconfig kbhowtomaster kbsecurity kbstate KB312906

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com