4단계 구성: 애플리케이션 보안 구성
키스 뉴먼과 로버트 맥머레이
ASP.NET 웹 사이트 작성 과정의 이 단계에서는 IIS에서 사용 가능한 보안 설정을 구성합니다. 다음 섹션에서는 ASP.NET 응용 프로그램의 일반 보안 설정에 대해 설명합니다.
4.1. 웹 애플리케이션 격리
서버의 웹 사이트와 웹 애플리케이션을 격리하려면 다음 권장 사항을 구현합니다.
- 웹 사이트 또는 웹 애플리케이션별로 애플리케이션 풀을 하나 사용합니다.
- 애플리케이션 풀 ID에 대한 사이트 폴더 및 파일 액세스를 제한합니다.
- 사이트별로 개별 ASP.NET 임시 폴더를 설정하고 응용 프로그램 풀 ID에만 액세스 권한을 제공합니다.
- 애플리케이션 풀 ID에만 액세스를 허용하도록 각 사이트 루트에서 ACL(액세스 제어 목록)을 설정합니다.
애플리케이션 풀별로 둘 이상의 애플리케이션이 있는 경우 충분한 애플리케이션 풀을 만들고 일부 애플리케이션을 새 풀로 이동하는 것이 좋습니다.
애플리케이션을 만들려면
- IIS 관리자를 엽니다.
- 연결 창에서 애플리케이션 풀을 클릭합니다.
- 작업 창에서 애플리케이션 풀 추가를 클릭합니다.
- 이름 상자에 애플리케이션 풀의 고유한 이름을 입력합니다.
- .NET Framework 버전과 관리되는 파이프라인 모드를 선택합니다.
- 확인을 클릭합니다.
애플리케이션을 다른 애플리케이션 풀로 이동하려면
- IIS 관리자를 엽니다.
- 연결 페이지에서 이동하려는 웹 사이트 또는 웹 애플리케이션을 선택합니다.
- 작업 창에서 기본 설정을 클릭합니다.
- 사이트 편집 대화 상자에서 선택을 클릭하여 애플리케이션 풀 선택 대화 상자를 열고 애플리케이션 풀 메뉴에서 애플리케이션 풀을 선택합니다.
- 확인을 클릭하여 애플리케이션 풀 선택 대화 상자를 닫은 후 확인을 클릭하여 사이트 편집 메뉴를 닫습니다.
폴더 또는 파일 ACL에 애플리케이션 풀 ID를 추가하려면
- Windows 탐색기를 열고 폴더 또는 파일로 이동합니다.
- 폴더 또는 파일을 마우스 오른쪽 단추로 클릭한 후 속성을 클릭합니다.
- 보안 탭을 선택하고 편집을 클릭합니다.
- 추가, 위치를 차례로 클릭하고 검색할 위치로 서버를 선택합니다.
- 선택할 개체 이름을 입력하십시오. 상자에 IIS APPPOOL\applicationPoolName을 입력합니다. 여기서 applicationPoolName은 응용 프로그램 풀 ID입니다.
- 확인, 확인, 확인을 계속 클릭하여 대화 상자를 닫습니다.
4.2. .NET 신뢰 수준
이 섹션에서는 IIS 관리자 UI 또는 명령줄을 사용하여 응용 프로그램 신뢰 수준을 설정하는 방법을 설명합니다.
UI를 사용하여 신뢰 수준을 설정하려면
- IIS 관리자를 열고 관리하려는 수준으로 이동합니다.
- 기능 보기에서 .NET 신뢰 수준을 두 번 클릭합니다.
- .NET 신뢰 수준 페이지의 신뢰 수준 드롭다운 목록에서 신뢰 수준을 선택한 다음 작업 창에서 적용을 클릭합니다.
명령줄을 사용하여 신뢰 수준을 설정하려면
신뢰 수준을 설정하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:trust /level:Full|High|Medium|Low|Minimal
level 특성은 미리 구성된 CAS 정책 파일에 해당하는 5개 값 중 하나를 사용합니다. 예를 들어 의 Full
신뢰 수준을 설정하려면 명령 프롬프트에 다음을 입력한 다음 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:trust /level:Full
참고
Appcmd.exe 사용하여 IIS 8의 전역 수준에서 trust 요소를 구성하는 경우 명령에서 를 지정 /commit:WEBROOT
하여 ApplicationHost.config 대신 루트 Web.config 파일을 구성하도록 합니다.
4.3. .NET 인증
IIS에서 ASP.NET 웹 사이트 계획에서 애플리케이션에 적합한 인증 모드에 대한 디자인 결정을 내렸습니다.
ASP.NET 폼 인증
이 섹션에서는 IIS 관리자 UI 또는 명령줄을 사용하여 ASP.NET 폼 인증을 구성하는 방법을 설명합니다.
UI를 사용하여 폼 인증을 구성하려면
- IIS 관리자를 열고 관리하려는 수준으로 이동합니다.
- 기능 보기에서 인증을 두 번 클릭합니다.
- 인증 페이지에서 폼 인증을 선택합니다.
- 기본 설정으로 폼 인증을 사용하려면 작업 창에서 사용을 클릭합니다.
- 작업 창에서 편집을 클릭합니다.
- 폼 인증 설정 편집 대화 상자의 로그인 URL 텍스트 상자에 클라이언트가 로그인하는 페이지의 이름을 입력합니다.
- 인증 쿠키 제한 시간(분) 텍스트 상자에 제한 시간 값에 사용할 분 수를 입력합니다.
- 모드 목록에서 사용할 쿠키 모드를 선택합니다.
- 이름 텍스트 상자에 쿠키의 이름을 입력합니다.
- 보호 모드 목록에서 사용할 보호 모드를 선택합니다.
- SSL 필요 확인란을 선택합니다.
- 요청마다 쿠키 만료 기한 확장 확인란을 선택하고 확인을 클릭합니다.
명령줄을 사용하여 폼 인증을 구성하려면
폼 인증을 사용하도록 설정하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /mode:None|Windows|Passport|Forms
기본적으로 IIS 8은 mode
특성을 Windows
로 설정하여 Forms 인증을 사용하지 않도록 설정합니다. 특성을 로 설정하면 Forms 인증을 Forms
사용하도록 설정합니다. 예를 들어 폼 인증을 사용하도록 설정하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /mode:Forms
참고
Appcmd.exe 사용하여 IIS 8의 전역 수준에서 인증 요소를 구성하는 경우 명령에서 를 지정 /commit:WEBROOT
하여 ApplicationHost.config 대신 루트 Web.config 파일에 대한 구성을 변경합니다.
폼 인증의 로그인 URL을 지정하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.loginURL:string
변수 forms.loginURL:string
는 클라이언트가 로그인하는 페이지의 이름입니다. 기본값은 Login.aspx입니다. 예를 들어 폼 인증의 로그인 URL을 지정하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.loginURL:login.aspx
참고
Appcmd.exe 사용하여 IIS 8의 전역 수준에서 인증 요소를 구성하는 경우 명령에서 를 지정 /commit:WEBROOT
하여 ApplicationHost.config 대신 루트 Web.config 파일에 대한 구성을 변경합니다.
폼 인증의 인증 제한 시간을 지정하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.timeout:TimeSpan
변수 forms.timeout:TimeSpan
는 인증에 사용되는 쿠키가 만료되는 시간(분)입니다. 기본값은 30분입니다. 예를 들어 폼 인증의 인증 제한 시간을 지정하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.timeout:30
참고
Appcmd.exe 사용하여 IIS 8의 전역 수준에서 인증 요소를 구성하는 경우 명령에서 를 지정 /commit:WEBROOT
하여 ApplicationHost.config 대신 루트 Web.config 파일에 대한 구성을 변경해야 합니다.
폼 인증용 쿠키 이름을 구성하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.name:string
변수 forms.name:string
는 Forms 인증에 사용되는 쿠키의 이름입니다. 기본값은 .ASPXAUTH입니다. 예를 들어 폼 인증용 쿠키 이름을 구성하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.name:.ASPXUTH
폼 인증용 쿠키 모드를 구성하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.cookieless:UseUri|UseCookies|AutoDetect|UseDeviceProfile
forms.cookieless
의 기본값은 UseDeviceProfile
입니다. 예를 들어 장치 프로필 사용 설정을 사용하도록 폼 인증용 쿠키 모드를 구성하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.cookieless:UseDeviceProfile
폼 인증용 쿠키 보호 모드를 구성하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.protection:All|None|Encryption|Validation
forms.protection
의 기본값은 All
입니다. 예를 들어 암호화 및 유효성 검사 설정을 사용하도록 폼 인증용 쿠키 보호 모드를 구성하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.protection:All
인증 쿠키에 대해 SSL을 사용해야 하도록 설정하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.requireSSL:true|false
forms.requireSSL
의 기본값은 false
입니다. 이 특성을 로 true
설정하면 SSL이 필요합니다. 예를 들어 인증 쿠키에 대해 SSL을 사용해야 하도록 설정하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.requireSSL:true
자주 요청되는 콘텐츠를 캐시하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.slidingExpiration:true|false
forms.slidingExpiration
의 기본값은 true
입니다. 예를 들어 자주 요청되는 콘텐츠를 캐시하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.slidingExpiration:true
ASP.NET 가장 인증
UI를 사용하여 가장 인증을 구성하려면
- IIS 관리자를 열고 관리하려는 수준으로 이동합니다.
- 기능 보기에서 인증을 두 번 클릭합니다.
- 인증 페이지에서 ASP.NET 가장을 선택합니다.
- 기본 설정으로 ASP.NET 가장 인증을 사용하려면 작업 창에서 사용을 클릭합니다.
- 필요한 경우 작업 창에서 편집을 클릭하여 보안 주체를 설정합니다.
- ASP.NET 가장 설정 편집 대화 상자에서 특정 사용자 또는 인증된 사용자를 선택합니다. 어떤 옵션을 사용하도록 결정하든 IIS는 ASP.NET 응용 프로그램의 보안 컨텍스트에 이 ID를 사용합니다. 기본적으로 IIS 8은 인증된 사용자를 가장하도록 설정됩니다.
- 확인을 클릭하여 작업을 완료하거나 필요에 따라 다음 단계를 진행하여 가장할 ID를 변경합니다.
- 원하는 경우 설정을 클릭하여 특정 사용자 ID를 변경합니다.
- 익명 액세스용으로 IIS에서 사용해야 하는 새 계정에 대해 자격 증명 설정 대화 상자의 사용자 이름에 기존 사용자 계정의 이름을, 암호에 해당 사용자 계정과 연결된 암호를, 암호 확인에 이 암호와 정확히 동일한 값을 입력합니다.
- 확인을 클릭하여 자격 증명 설정 대화 상자를 닫습니다.
- 확인을 클릭하여 ASP.NET 가장 설정 편집 대화 상자를 닫습니다.
명령줄을 사용하여 가장 인증을 구성하려면
ASP.NET 가장을 사용하거나 사용하지 않도록 설정하려면 다음 구문을 사용합니다.
appcmd set config /commit:WEBROOT /section:identity /impersonate:true|false
기본적으로 IIS는 impersonate
특성을 false
로 설정하여 ASP.NET 가장 인증을 사용하지 않도록 설정합니다. 특성을 true
로 설정하면 ASP.NET 가장 인증을 사용하도록 설정합니다. 예를 들어 ASP.NET 가장 인증을 사용하도록 설정하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:identity /impersonate:true
원하는 경우 다음 구문을 사용하여 IIS에서 가장하도록 할 계정을 설정할 수 있습니다.
appcmd set config /commit:WEBROOT /section:identity /userName:string /password:string
변수 userName:string
는 IIS가 가장하는 데 사용하는 계정이며 변수 password:string
는 암호입니다. 예를 들어 IIS에서 Moe 계정을 가장하도록 하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config /commit:WEBROOT /section:identity /userName: Moe /password:pass@word1
참고
Appcmd.exe 사용하여 IIS 8의 전역 수준에서 ID 요소를 구성하는 경우 명령에서 를 지정 /commit:WEBROOT
하여 ApplicationHost.config 대신 루트 Web.config 파일을 구성하도록 합니다.
4.4. 컴퓨터 키 설정
이 섹션에서는 IIS 관리자 UI를 사용하여 ASP.NET 응용 프로그램용 컴퓨터 키를 생성하는 방법을 설명합니다.
UI를 사용하여 컴퓨터 키를 생성하려면
- IIS 관리자를 열고 관리하려는 수준으로 이동합니다.
- 기능 보기에서 컴퓨터 키를 두 번 클릭합니다.
- 컴퓨터 키 페이지의 유효성 검사 방법 목록에서 유효성 검사 방법을 선택합니다. 기본 유효성 검사 방법은 SHA1입니다.
- 암호화 방법 목록에서 암호화 방법을 선택합니다. 기본 암호화 방법은 자동입니다.
- 원하는 경우 유효성 검사 및 암호 해독 키의 설정을 구성합니다.
- 작업 창에서 키 생성을 클릭한 다음 적용을 클릭합니다.
4.5. TLS/SSL 통신
이 섹션에서는 응용 프로그램에 대해 TLS/SSL 보안을 구성하는 방법을 설명합니다.
CA(인증 기관)에서 서버 인증서를 받은 후 다음 섹션의 절차를 진행합니다.
SSL 바인딩
이 섹션에서는 IIS 관리자 UI 또는 명령줄을 사용하여 사이트에 SSL 바인딩을 추가하는 방법을 설명합니다.
UI를 사용하여 사이트에 SSL 바인딩을 추가하려면
- IIS 관리자를 엽니다.
- 연결 창의 트리에서 사이트 노드를 확장한 다음 바인딩을 추가할 사이트를 클릭하여 선택합니다.
- 작업 창에서 바인딩을 클릭합니다.
- 사이트 바인딩 대화 상자에서 추가를 클릭합니다.
- 사이트 바인딩 추가 대화 상자의 유형 목록에서 https를 선택합니다.
- 특정 IP 주소를 사용하려는 경우가 아니면 IP 주소 목록에서 지정하지 않은 모든 IP를 선택합니다.
- 포트 상자에 포트 번호를 입력합니다(기본값은 443).
- 호스트 이름 상자에 호스트 컴퓨터의 이름을 입력합니다.
- 같은 IP 주소를 통해 여러 보안 웹 사이트에 서비스를 제공하려면 서버 이름 표시 필요 확인란을 선택합니다.
- SSL 인증서 목록에서 웹 사이트의 인증서를 선택합니다. 인증서가 목록에 표시되지 않으면 선택을 클릭하고 인증서 선택 대화 상자를 사용하여 인증서를 검색합니다.
- 확인을 클릭합니다.
명령줄을 사용하여 사이트에 SSL 바인딩을 추가하려면
사이트에 바인딩을 추가하려면 다음 구문을 사용합니다.
appcmd set site /site.name:string /+bindings.[protocol='string', bindingInformation='string']
변수 site.name:string
는 바인딩을 추가할 사이트의 이름입니다. 변수 protocol='string'
는 사용하려는 프로토콜이며 변수 bindingInformation='string'
는 IP 주소, 포트 및 호스트 헤더의 조합입니다.
예를 들어 호스트 헤더 없이 포트 443에서 모든 IP 주소에 대해 HTTPS 바인딩을 포함하도록 contoso 사이트를 구성하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set site /site.name:contoso /+bindings.[protocol='https', bindingInformation='*:443:']
사이트에서 SSL을 사용해야 하도록 설정
이 섹션에서는 IIS 관리자 UI 또는 명령줄을 사용하여 웹 사이트에 SSL을 사용해야 하도록 설정하는 방법을 설명합니다.
UI를 사용하여 SSL을 사용해야 하도록 설정하려면
IIS 관리자를 열고 관리하려는 수준으로 이동합니다. 현재 수준이 사이트, 응용 프로그램 또는 디렉터리 수준인지 확인합니다. 서버 수준에서는 SSL 설정을 사용할 수 없습니다.
참고
파일 수준에서 SSL을 구성하려면 콘텐츠 보기에서 파일로 이동한 다음 작업 창에서 기능 보기로 전환을 클릭합니다.
기능 보기에서 SSL 설정을 두 번 클릭합니다.
SSL 설정 페이지에서 SSL 필요를 선택합니다.
작업 창에서 적용을 클릭합니다.
명령줄을 사용하여 SSL을 사용해야 하도록 설정하려면
SSL을 사용해야 하도록 설정하려면 다음 구문을 사용합니다.
appcmd set config "site|URL" /section:access /sslFlags:Ssl /commit:APPHOST
변수 site|URL
는 IIS 8에서 SSL을 요구하려는 사이트, 애플리케이션, 가상 디렉터리 또는 파일입니다. 예를 들어 기본 웹 사이트에 대해 SSL을 사용해야 하도록 설정하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config "Default Web Site" /section:access /sslFlags:Ssl /commit:APPHOST
기본 웹 사이트에서 iisstart.htm 파일에 대해 SSL을 사용해야 하도록 설정하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config "http://localhost/iisstart.htm" /section:access /sslFlags:Ssl /commit:APPHOST
클라이언트 인증서
UI를 사용하여 클라이언트 인증서를 지정하려면
IIS 관리자를 열고 관리하려는 수준으로 이동합니다. 현재 수준이 사이트, 응용 프로그램 또는 디렉터리 수준인지 확인합니다. 서버 수준에서는 SSL 설정을 사용할 수 없습니다.
참고
파일 수준에서 SSL을 구성하려면 콘텐츠 보기에서 파일로 이동한 다음 작업 창에서 기능 보기로 전환을 클릭합니다.
기능 보기에서 SSL 설정을 두 번 클릭합니다.
원하는 경우 SSL 설정 페이지에서 SSL 필요를 선택합니다. 클라이언트 인증서를 무시하거나 수락하는 경우에는 SSL을 사용하지 않아도 됩니다.
SSL 설정 페이지의 클라이언트 인증서 영역에서 다음 절차 중 하나를 수행합니다.
- 클라이언트에서 인증서를 제공하더라도 클라이언트 인증서를 수락하지 않으려면 무시를 선택합니다.
- 수락을 선택하여 클라이언트 인증서를 수락합니다.
- 클라이언트 인증서를 사용해야 하도록 설정하려면 필요를 선택합니다. 클라이언트 인증서 필요 옵션을 사용하려면 SSL 필요를 사용하도록 설정해야 합니다.
작업 창에서 적용을 클릭합니다.
명령줄을 사용하여 클라이언트 인증서를 지정하려면
클라이언트 인증서 사용 여부를 지정하려면 다음 구문을 사용합니다.
appcmd set config "site|URL" /section:access /sslFlags:Ssl|SslNegotiateCert|SslRequireCert /commit:APPHOST
변수 site|URL
는 IIS에서 클라이언트 인증서를 사용하도록 설정할 사이트, 애플리케이션, 가상 디렉터리 또는 파일입니다. 예를 들어 기본 웹 사이트에 대해 클라이언트 인증서를 수락하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config "Default Web Site" /section:access /sslFlags:SslNegotiateCert /commit:APPHOST
기본 웹 사이트에서 iisstart.htm 파일에 대해 클라이언트 인증서를 수락하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config "http://localhost/iisstart.htm" /section:access /sslFlags:SslNegotiateCert /commit:APPHOST
sslFlags 특성에 대해 하나 이상의 값을 지정할 수 있습니다. 둘 이상의 값을 지정하려면 각 값을 쉼표(,)로 구분합니다. 예를 들어 기본 웹 사이트에서 SSL과 클라이언트 인증서 둘 다에 대한 요구 사항을 지정하려면 명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다.
appcmd set config "Default Web Site" /section:access /sslFlags:Ssl,SslRequireCert /commit:APPHOST