Laboratory/Develop

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

theking 2008. 3. 10. 20:52

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

기술 자료 ID:312906
마지막 검토:2005년 8월 11일 목요일
수정:3.6

요약

이 문서에서는 폼 인증 쿠키 데이터의 암호화, 해독, 유효성 검사에 사용할 키를 만드는 방법을 설명합니다. 이 문서에서 만든 키를 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(http://support.microsoft.com/kb/301240/)C# .NET을 사용하여 ASP.NET 응용 프로그램에서 폼 기반 인증을 구현하는 방법
311495(http://support.microsoft.com/kb/311495/)Visual C# .NET을 사용하여 ASP.NET 응용 프로그램에서 폼 기반 인증을 가진 역할 기반 보안을 구현하는 방법
306590(http://support.microsoft.com/kb/306590/)INFO: ASP.NET 보안 개요
307626(http://support.microsoft.com/kb/307626/)INFO: ASP.NET 구성 개요