이 문서에서는 가상 클라이언트 및 서버 배포를 사용하여 Kerberos 인증 문제에 대한 문제 해결 방법을 보여 줍니다.
환경 및 구성
사용자 "John"이 도메인에
contoso.com
속합니다.모든 도메인의 DNS(도메인 이름 시스템) 서버는 도메인 컨트롤러입니다.
John은 다음과 같이 구성된 클라이언트 컴퓨터에 로그인됩니다.
이름 및 도메인:
Client1.contoso.com
운영 체제: Windows 11
브라우저: Microsoft Edge
모니터링 애플리케이션: 네트워크 모니터( Microsoft 네트워크 모니터에서 설치됨)
인터넷 옵션 구성: 모든
contoso.com
사이트가 로컬 인트라넷 영역에 속합니다.
클라이언트 컴퓨터에서 John은 다음과 같이 구성된 대상 서버에 연결합니다.
이름 및 도메인:
IISServer.contoso.com
운영 체제: Windows Server 2019
대상 서비스: IIS(인터넷 정보 서비스)에서 실행되는 웹 사이트
대상 서비스 계정: 컴퓨터 계정(서비스의 컨텍스트
IISServer.contoso.com
에서 실행됨)대상 서비스 포트: TCP 포트 80
인증 구성(인터넷 정보 서비스 관리자에서 구성):
Windows 인증 이 사용되도록 설정되어 있습니다.
사용 가능한 인증 공급자 목록에는 다음 스크린샷과 같이 Negotiate가 포함됩니다.
로그온 감사 구성: 로그온 성공 감사 및 로그온 실패 감사가 모두 사용하도록 설정됩니다.
비고
기본적으로 모든 Windows Server 운영 체제에는 성공 및 실패 로그온 감사가 활성화되어 있습니다. 이 설정을 확인하려면 관리 명령 프롬프트 창을 열고 다음 명령을 실행합니다.
auditpol /get /Subcategory:"logon"
설정을 사용하도록 설정하면 이 명령은 다음 출력을 생성합니다.
System audit policy Category/Subcategory Setting Logon/Logoff Logon Success and Failure
이 결과가 표시되지 않으면 다음 명령을 실행하여 성공 및 실패 감사 로깅을 사용하도록 설정합니다.
auditpol /set /subcategory:"Logon" /Success:enable /Failure:enable
예상 인증 흐름
다음 다이어그램은 Kerberos 요청 및 응답 메시지의 시퀀스와 이전 섹션에서 설명한 환경에서 해당 메시지의 경로를 보여 줍니다.
이 프로세스는 클라이언트 컴퓨터에 Client1.contoso.com
로그인한 사용자 John이 Microsoft Edge 브라우저를 열고 연결할 때 시작됩니다 IISServer.contoso.com
.
1단계 는 클라이언트 컴퓨터에서 발생하며 다음 단계를 포함합니다.
- DNS 확인자 서비스는
IISServer.contoso.com
를 캐시하여 이 정보가 이미 캐시되었는지 확인합니다. - DNS 확인자 서비스는 HOSTS 파일(C:\Windows\System32\drivers\etc\Hosts)에서
IISServer.contoso.com
의 매핑을 확인합니다. - DNS 클라이언트 서비스는 DNS 쿼리를 기본 DNS 서버로 보냅니다(IP 구성 설정에 구성된 대로).
2단계 는 DNS 서버(도메인 컨트롤러)에서 발생하며 다음 단계를 포함합니다.
- DNS 서버 서비스는 구성된 영역을 확인한 후 호스트 "A" 레코드를 찾아
IISServer.contoso.com
를 IP 주소192.168.2.104
로 변환합니다. - DNS 서버는 클라이언트 컴퓨터에 IP 주소를 반환합니다.
3단계 는 클라이언트 컴퓨터에서 발생하며 다음 단계를 포함합니다.
- 클라이언트 컴퓨터는 TCP 포트 80을 사용하여 TCP 3방향 핸드셰이크를
IISServer.contoso.com
수행합니다. - 클라이언트 컴퓨터에서 익명 HTTP 요청을
IISServer.contoso.com
보냅니다.
4단계 는 대상 서버에서 발생하며 다음 단계를 포함합니다.
- 웹 서비스(
IISServer.contoso.com
로 실행 중)는Client1.contoso.com
에서 요청을 받습니다. - 웹 서비스는 "HTTP 401" 챌린지 응답을 포함하는 응답 메시지를
Client1.contoso.com
보냅니다. 메시지는 기본 인증 공급자로 Negotiate를 지정하고 보조 인증 공급자로 NTLM을 지정합니다.
5단계 는 클라이언트 컴퓨터에서 발생하며 다음 단계를 포함합니다.
- 클라이언트 컴퓨터가
IISServer.contoso.com
에서 도전 응답 메시지를 받습니다. - Microsoft Edge 프로세스는
IISServer.contoso.com
가 로컬 인트라넷 영역에 속하는지 확인합니다. 따라서 인증 프로세스는 NTLM 대신 Kerberos를 사용해야 합니다. - Microsoft Edge 프로세스는 LSASS.exe를 호출하여
IISServer.contoso.com
에 대한 서비스 티켓을 찾습니다. - 이 경우 클라이언트 컴퓨터에 적절한 서비스 티켓이 없습니다. Microsoft Edge 프로세스는 티켓을 위해 KDC(Kerberos 배포 센터)에 요청을 보냅니다.
6단계 는 도메인 컨트롤러에서 발생하며 다음 단계를 포함합니다.
- 도메인 컨트롤러(KDC 서비스)는 요청을
Client1.contoso.com
수신하고 SPNHTTP\IISServer.contoso.com
(또는HOST\IISServer.contoso.com
)을 사용하는 서비스를 검색합니다. - 도메인 컨트롤러는 요청된 서비스를 의 컨텍스트
IISServer.contoso.com
에서 실행되는 웹 서비스로 식별합니다. - 도메인 컨트롤러는 웹 서비스에 대한
IISServer.contoso.com
서비스 티켓을 포함하는 클라이언트 컴퓨터에 응답을 보냅니다.
7단계 는 도메인 컨트롤러에서 발생하며 다음 단계를 포함합니다.
- Microsoft Edge 프로세스는 서비스 티켓을 포함하는 Kerberos AP(애플리케이션 프로토콜) 메시지를 만듭니다.
- Microsoft Edge 프로세스는 "HTTP 401" 챌린지 응답 메시지에 대한 응답으로 AP
IISServer.contoso.com
메시지를 보냅니다.
8단계 는 웹 서버에서 발생하며 다음 단계를 포함합니다.
- IIS 프로세스는 로컬 LSASS.exe 프로세스를 쿼리합니다.
- LSASS.exe 프로세스는 티켓의 암호를 해독한 다음 SessionID 및 John의 그룹 멤버 자격을 포함하는 사용자에 대한 토큰을 만듭니다.
- LSASS.exe 프로세스가 IIS 프로세스에 토큰 핸들을 반환합니다.
- IIS 프로세스는 토큰의 그룹 정보를 검사하여 John에게 요청된 페이지에 액세스할 수 있는 권한이 있는지 확인합니다.
- IIS 프로세스는 요청된 페이지를 브라우저로 보냅니다.
네트워크 모니터를 사용하여 인증 테스트 기록
환경 및 구성 섹션에 설명된 것과 유사한 환경에서 추적 데이터를 수집하려면 다음 단계를 사용합니다. 이 테스트 중에 시스템 구성 요소는 예상 인증 흐름 섹션에 설명된 방식으로 상호 작용해야 합니다.
비고
이 섹션의 절차를 사용하려면 로컬 관리자 그룹에 속해야 합니다.
- 클라이언트 컴퓨터에서 관리 명령 프롬프트 창을 열고 실행
ipconfig /flushdns
합니다. - 네트워크 모니터를 열고 기록을 시작합니다.
- Microsoft Edge를 엽니다. 주소 표시줄에
http://iisserver.contoso.com
을 입력합니다. - Microsoft Edge 작업이 완료되면 네트워크 모니터에서 기록을 중지합니다.
인증 테스트에서 생성하는 데이터 검토
인증 테스트는 다음 정보를 생성합니다.
- 네트워크 모니터 추적 데이터
- 티켓 데이터
- 인증 이벤트에 대한 감사 성공 및 감사 실패 이벤트 데이터
이 섹션의 나머지 부분에서는 인증 흐름이 생성하는 데이터에 대해 자세히 설명합니다.
중요한 이벤트에 대한 추적 데이터 검토
추적 데이터에서 다음 추적 발췌와 유사한 정보를 찾습니다.
호스트 "A" 레코드에 대한 도메인 컨트롤러에 대한
IISServer.contoso.com
DNS 쿼리:3005 00:59:30.0738430 Client1.contoso.com DCA.contoso.com DNS DNS:QueryId = 0x666A, QUERY (Standard query), Query for iisserver.contoso.com of type Host Addr on class Internet
도메인 컨트롤러의 DNS 서비스에서 DNS 응답:
3006 00:59:30.0743438 DCA.contoso.com Client1.contoso.com DNS DNS:QueryId = 0x666A, QUERY (Standard query), Response - Success, 192.168.2.104
Microsoft Edge 프로세스
Client1.contoso.com
에서 IIS 웹 서버로의IISServer.contoso.com
익명 요청:3027 00:59:30.1609409 Client1.contoso.com iisserver.contoso.com HTTP HTTP:Request, GET / Host: iisserver.contoso.com
HTTP 401 챌린지 응답 메시지:
IISServer.contoso.com
에서Client1.contoso.com
로3028 00:59:30.1633647 iisserver.contoso.com Client1.contoso.com HTTP HTTP:Response, HTTP/1.1, Status: Unauthorized, URL: /favicon.ico Using Multiple Authetication Methods, see frame details WWWAuthenticate: Negotiate WWWAuthenticate: NTLM
Client1.contoso.com
에서 도메인 컨트롤러DCA.contoso.com
로 가는, SPN으로 사용되는HTTP/iisserver.contoso.com
서비스에 대한 서비스 티켓 요청(TGS 요청 메시지라고도 함):3034 00:59:30.1834048 Client1.contoso.com DCA.contoso.com KerberosV5 KerberosV5:TGS Request Realm: CONTOSO.COM Sname: HTTP/iisserver.contoso.com
DCA.contoso.com
의 서비스 티켓 응답에는,IISServer.contoso.com
(TGS 응답 메시지라고도 함) 서비스 티켓이 포함됩니다.3036 00:59:30.1848687 DCA.contoso.com Client1.contoso.com KerberosV5 KerberosV5:TGS Response Cname: John Ticket: Realm: CONTOSO.COM, Sname: HTTP/iisserver.contoso.com Sname: HTTP/iisserver.contoso.com
Microsoft Edge 프로세스
Client1.contoso.com
에서IISServer.contoso.com
로의 두 번째 요청. 이 메시지에는 서비스 티켓이 포함됩니다.3040 00:59:30.1853262 Client1.contoso.com iisserver.contoso.com HTTP HTTP:Request, GET /favicon.ico , Using GSS-API Authorization Authorization: Negotiate Authorization: Negotiate YIIHGwYGKwYBBQUCoIIHDzCCBwugMDAuBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHgYKKwYBBAGCNwICCqKCBtUEggbRYIIGzQYJKoZIhvcSAQICAQBugga8MIIGuKADAgEFoQMCAQ6iBwMFACAAAACjggTvYYIE6zCCBOegAwIBBaENGwtDT05UT1NPLkNPTaIoMCagAwIBAqEfMB0bBEhUVFAbF SpnegoToken: 0x1 NegTokenInit: ApReq: KRB_AP_REQ (14) Ticket: Realm: CONTOSO.COM, Sname: HTTP/iisserver.contoso.com
IIS 서버의 메시지가
Client1.contoso.com
에 전송되었습니다. 이 메시지는 사용자가 인증되고 권한이 부여되었음을 나타냅니다.3044 00:59:30.1875763 iisserver.contoso.com Client1.contoso.com HTTP HTTP:Response, HTTP/1.1, Status: Not found, URL: / , Using GSS-API Authentication WWWAuthenticate: Negotiate oYG2MIGzoAMKAQChCwYJKoZIgvcSAQICooGeBIGbYIGYBgkqhkiG9xIBAgICAG+BiDCBhaADAgEFoQMCAQ+ieTB3oAMCARKicARuIF62dHj2/qKDRV5XjGKmyFl2/z6b9OHTCTKigAatXS1vZTVC1dMvtNniSN8GpXJspqNvEfbETSinF0ee7KLaprxNgTYwTrMVMnd95SoqBkm/FuY7WbTAuPvyRmUuBY3EKZEy NegotiateAuthorization: GssAPI: 0x1 NegTokenResp: ApRep: KRB_AP_REP (15)
클라이언트 컴퓨터에서 티켓 정보 검토
클라이언트 컴퓨터의 명령 프롬프트에서 실행 klist tickets
합니다. 출력은 다음 발췌와 비슷해야 합니다.
Client: John @ CONTOSO.COM
Server: HTTP/iisserver.contoso.com @ CONTOSO.COM
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
Start Time: 11/28/2022 0:59:30 (local)
End Time: 11/28/2022 10:58:56 (local)
Renew Time: 12/5/2022 0:58:56 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0
Kdc Called: DCA.contoso.com
대상 서버에서 감사 이벤트 검토
이벤트 뷰어에서 IISServer.contoso.com
Windows 로그>보안 로그로 이동하여 로그인(로그온) 이벤트를 검토합니다. 이벤트 ID 4624 또는 4625의 인스턴스를 찾고 다음 필드를 확인합니다.
- 키워드: 감사 성공 또는 감사 실패
- 로그온 유형: 3 (네트워크 로그온)
- 새 로그온 필드의 보안 ID: Contoso\John
- 원본 네트워크 주소: 클라이언트 컴퓨터의 IP 주소
- 로그온 프로세스 및 인증 패키지: Kerberos
이벤트 레코드의 전체 텍스트는 다음 발췌와 유사합니다.
Log Name: Security
Source: Microsoft-Windows-Security-Auditing
Date: 11/28/2022 12:59:30 AM
Event ID: 4624
Task Category: Logon
Level: Information
Keywords: Audit Success
User: N/A
Computer: IISServer.contoso.com
Description:
An account was successfully logged on.
Subject:
Security ID: NULL SID
Account Name: -
Account Domain: -
Logon ID: 0x0
Logon Information:
Logon Type: 3
Restricted Admin Mode: -
Virtual Account: No
Elevated Token: No
Impersonation Level: Impersonation
New Logon:
Security ID: CONTOSO\John
Account Name: John
Account Domain: CONTOSO.COM
Logon ID: 0x1B64449
Linked Logon ID: 0x0
Network Account Name: -
Network Account Domain: -
Logon GUID: {<GUID>}
Process Information:
Process ID: 0x0
Process Name: -
Network Information:
Workstation Name: -
Source Network Address: 192.168.2.101
Source Port: 52655
Detailed Authentication Information:
Logon Process: Kerberos
Authentication Package: Kerberos
인증 워크플로 문제 해결
네트워크 추적을 검토하여 문제가 발생하는 프로세스의 위치를 좁힐 수 있도록 실패하는 단계를 관찰합니다. 이 정보를 사용하여 문제를 해결하는 데 도움이 될 수 있는 문제 해결 방법을 결정합니다.
네트워크 연결 확인
DNS 또는 TCP 통신에 문제가 있는 것 같으면 다음 상호 작용을 확인합니다.
클라이언트 컴퓨터
Client1.contoso.com
()에서 대상 서버(IISServer.contoso.com
)의 이름을 확인할 수 있는지 확인합니다.DNS 서버가 대상 서버 IP 주소를 올바르게 확인하는지 확인합니다. 이렇게 하려면 PowerShell 창을 열고 다음 cmdlet을 실행합니다.
Resolve-DnsName -Name IISServer.contoso.com
이 cmdlet의 출력은 다음 발췌와 유사합니다.
Name Type TTL Section IPAddress ---- ---- --- ------- --------- IISServer.contoso.com A 1200 Answer 192.168.2.104
클라이언트 컴퓨터와 대상 서버 간에 필요한 네트워크 포트가 열려 있는지 확인합니다. 이렇게 하려면 다음 cmdlet을 실행합니다.
Test-NetConnection -Port 80 IISServer.contoso.com
이 cmdlet의 출력은 다음 발췌와 유사합니다.
ComputerName : IISServer.contoso.com RemoteAddress : 192.168.2.104 RemotePort : 80 InterfaceAlias : Ethernet 2 SourceAddress : 192.168.2.101 TcpTestSucceeded : True
클라이언트 컴퓨터에서 티켓 정보 확인
웹 사이트에 액세스하려는 사용자의 컨텍스트에서 관리 명령 프롬프트 창 대신 표준 명령 프롬프트 창을 엽니다.
다음 명령을 지정된 순서대로 실행합니다.
klist purge klist get http/iisserver.contoso.com
이러한 명령의 출력은 다음 발췌와 유사합니다.
Current LogonId is 0:0xa8a98b A ticket to http/iisserver.contoso.com has been retrieved successfully. Cached Tickets: (2) #0> Client: John @ CONTOSO.COM Server: krbtgt/CONTOSO.COM @ CONTOSO.COM KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96 Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize Start Time: 11/28/2022 1:28:11 (local) End Time: 11/28/2022 11:28:11 (local) Renew Time: 12/5/2022 1:28:11 (local) Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: 0x1 -> PRIMARY Kdc Called: DCA.contoso.com #1> Client: John @ CONTOSO.COM Server: http/iisserver.contoso.com @ CONTOSO.COM KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96 Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize Start Time: 11/28/2022 1:28:11 (local) End Time: 11/28/2022 11:28:11 (local) Renew Time: 12/5/2022 1:28:11 (local) Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: 0 Kdc Called: DCA.contoso.com
이 발췌문은 티켓이 성공적으로 검색되었음을 나타냅니다. 티켓의 세부 정보는 캐시된 티켓 섹션에 "#1>"으로 표시됩니다.
기본 자격 증명을 사용하여 IIS 웹 서비스가 IIS 서버에서 실행되고 있는지 확인합니다.
웹 사이트에 액세스하려는 사용자의 컨텍스트에서 표준 PowerShell 프롬프트 창(관리 PowerShell 프롬프트 창 대신)을 엽니다.
invoke-webrequest -Uri http://IIsserver.contoso.com -UseDefaultCredentials
이러한 명령의 출력은 다음 발췌와 유사합니다.
StatusCode : 200
StatusDescription : OK
Content : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" cont...
RawContent : HTTP/1.1 200 OK
Persistent-Auth: true
Accept-Ranges: bytes
Content-Length: 703
Content-Type: text/html
Date: Mon, 28 Nov 2022 09:31:40 GMT
ETag: "3275ea8a1d91:0"
Last-Modified: Fri, 25 Nov 2022...
대상 서버에서 보안 이벤트 로그 검토
대상 서버의 이벤트 뷰어에서 Windows 로그>보안 로그로 이동합니다. 이벤트 ID 4624(감사 성공) 또는 4625(감사 실패)의 인스턴스를 찾습니다.
다른 서비스가 올바르게 작동하는지 확인
대상 서버의 다른 서비스가 Kerberos 인증을 처리할 수 있는지 확인하려면 다음 단계를 수행합니다.
대상 서버에서 파일 공유를 만들거나 테스트에 사용할 기존 파일 공유를 식별합니다. "당신이 'John' 역할로서 해당 폴더에 대한 읽기 권한을 갖고 있는지 확인하십시오."
클라이언트 컴퓨터에서 로그인(사용자 "John")한 다음 Windows 탐색기를 엽니다.
주소 표시줄에 \\IISServer.contoso.com \Software$를 입력합니다.
대상 서버에서 이벤트 뷰어를 연 다음 보안 이벤트를 검토합니다. 새 이벤트 ID 4624 이벤트 또는 이벤트 ID 4625 이벤트가 있는지 확인합니다.
클라이언트 컴퓨터의 명령 프롬프트에서
klist tickets
명령을 실행합니다. 명령 출력에는 다음 발췌와 같이 서비스 티켓CIFS/IISServer.contoso.com
이 포함되어야 합니다.#1> Client: John @ CONTOSO.COM Server: cifs/iisserver.contoso.com @ CONTOSO.COM KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96 Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize Start Time: 11/28/2022 1:40:22 (local) End Time: 11/28/2022 11:28:11 (local) Renew Time: 12/5/2022 1:28:11 (local) Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: 0 Kdc Called: DCA.contoso.com