다음을 통해 공유


Kerberos에서 KDC_ERR_S_PRINCIPAL_UNKNOWN 또는 KDC_ERR_PRINCIPAL_NOT_UNIQUE 오류를 생성합니다.

KDC_ERR_S_PRINCIPAL_UNKNOWN 및 KDC_ERR_PRINCIPAL_NOT_UNIQUE 오류는 클라이언트가 Kerberos에서 식별할 수 없는 서비스에 대한 액세스를 요청하고 있음을 나타냅니다. 이러한 종류의 오류는 다음 문제 중 하나 이상을 나타냅니다.

  • 서비스 계정이 올바르게 구성되지 않았습니다.
  • 서비스는 구성한 서비스 계정을 사용하지 않습니다.
  • 서비스에 대해 둘 이상의 계정이 구성됩니다.
  • 클라이언트가 서비스를 올바르게 요청하지 않았습니다.

각 서비스에는 클라이언트 및 기타 서비스로 식별하는 SPN(서비스 사용자 이름)이 있습니다. SPN은 서비스에서 사용하는 AD DS(Active Directory Domain Services) 계정의 특성입니다. 서비스는 사용자 지정 서비스 계정의 컨텍스트 또는 로컬 컴퓨터의 컴퓨터 계정과 같은 기본 제공 계정의 컨텍스트에서 실행할 수 있습니다. 로컬 시스템 또는 네트워크 서비스와 같은 컴퓨터 계정과 관련된 보안 컨텍스트에서 서비스를 실행할 수도 있습니다.

SPN을 구성하는 방식은 서비스에서 사용하는 계정 유형에 따라 다릅니다.

  • 사용자 지정 서비스 계정에는 계정을 사용하는 각 서비스에 대한 명시적 SPN이 있어야 합니다.
  • 컴퓨터 계정에는 이를 사용하는 서비스에 대해 구성된 명시적 SPN이 있을 수 있습니다. 그러나 일반적인 서비스 클래스는 HOST SPN에 자동으로 매핑됩니다. 각 컴퓨터 계정에 대해 HOST SPN이 자동으로 생성됩니다. 이러한 경우 일부 서비스에는 컴퓨터 계정에 구성된 자체 SPN이 없을 수 있습니다.

중요합니다

  • 서비스에서 컴퓨터 계정 및 HOST SPN을 사용하지 않는 한 SPN은 AD DS 포리스트에서 고유해야 합니다. 다중 포리스트 환경에서 SPN은 연결된 모든 포리스트에서 고유해야 합니다.
  • 하나의 SPN은 하나의 계정에만 연결할 수 있습니다. SPN 문제의 일반적인 원인은 SPN이 사용자 지정 계정과 컴퓨터 계정 모두에 연결되어 있더라도 사용자 지정 계정을 사용하도록 서비스를 구성하는 것입니다.

추적 데이터 수집 및 문제 SPN 식별

문제에 대한 추적 데이터를 아직 수집하지 않은 경우 지금 수행합니다. 자세한 내용은 Kerberos 인증 문제 해결 지침 3을 참조하세요. 추적 및 티켓 데이터를 수집합니다. 추적 데이터를 확인하여 클라이언트가 요청한 SPN을 찾습니다.

서비스 계정에서 사용하는 SPN 확인

이러한 절차는 서비스에서 사용자 지정 계정 또는 컴퓨터 계정을 사용하는지 여부에 따라 약간 다릅니다. 다음 표에서는 차이점을 요약합니다.

서비스에서 사용자 지정 계정을 사용합니다. 서비스는 컴퓨터 계정을 사용합니다.
요청된 SPN은 계정 SPN과 일치해야 합니다.

SPN은 포리스트 내에서 고유해야 합니다.
요청된 SPN이 계정 SPN 중 하나와 일치할 수 있습니다. 그러나 일반적인 서비스(예: 웹 서비스)는 일반적으로 고유한 SPN 대신 자동 HOST SPN을 사용합니다.

계정에 서비스와 관련된 SPN이 있는 경우 해당 SPN은 포리스트에서 고유해야 합니다.
  1. 서비스 계정에 할당된 SPN 목록을 가져옵니다. 이렇게 하려면 도메인 컨트롤러에서 관리 명령 프롬프트 창을 열고 다음 명령을 실행합니다.

    setspn -L <Name>
    

    비고

    • 이 명령 <에서 Name> 은 서비스를 실행하는 컴퓨터 또는 서비스에서 사용하는 사용자 지정 계정의 이름을 나타냅니다.
    • 다중 도메인 환경에서 도메인\이름> 형식을 <사용하여 계정의 도메인을 지정합니다.
  2. 요청된 SPN을 사용하는 계정을 검색합니다. 이 검색은 잘못된 계정에 할당된 모든 중복 SPN 또는 SPN을 식별합니다.

    비고

    이 절차를 수행하려면 엔터프라이즈 관리자 이상의 권한이 있어야 합니다.

    SPN과 연결된 계정 또는 계정을 확인하려면 관리 명령 프롬프트 창을 열고 다음 명령 중 하나를 실행합니다.

    단일 포리스트 여러 신뢰할 수 있는 숲
    setspn -Q <SPN> setspn -X <SPN>

    비고

    • 이 명령 <에서 SPN> 은 검색하는 SPN을 나타냅니다.
    • 중복 항목( 특히 포리스트 전체)을 검색하는 데 시간이 오래 걸리고 많은 메모리가 소요될 수 있습니다.

명령 및 사용 가능한 옵션에 setspn 대한 자세한 내용은 setspn을 참조하세요.

필요에 따라 SPN 다시 구성

다음 단계는 추적 데이터, setspn 쿼리 및 서비스에서 사용하는 계정 유형에 따라 달라집니다.

다음 문제를 볼 수 있습니다.

사용자 지정 계정 컴퓨터 계정
서비스 계정 이외의 하나 이상의 계정에 SPN이 있습니다. 컴퓨터 계정이 아닌 하나 이상의 계정에 SPN이 있습니다.
사용자 지정 계정에 SPN이 없습니다. 컴퓨터 계정에 SPN이 있어야 하지만 그렇지 않습니다. 1
사용자 지정 계정에 잘못된 SPN 또는 클라이언트가 요청한 SPN과 일치하지 않는 SPN이 있습니다. 2개 컴퓨터 계정에 잘못된 SPN 또는 클라이언트가 요청한 SPN과 일치하지 않는 SPN이 있습니다. 2개

1 컴퓨터 계정의 HOST SPN을 사용할 수 있는 서비스 목록은 setspn을 참조하세요. 서비스가 이러한 일반적인 서비스 중 하나가 아닌 경우 컴퓨터 계정에서 서비스에 대한 SPN을 구성해야 합니다.

2 클라이언트 요청 정보는 네트워크 추적 데이터를 참조하세요.

SPN 구성을 수정하려면 다음 방법을 사용합니다.

계정에서 SPN 제거

계정에서 SPN을 제거하려면 관리 명령 프롬프트에서 다음 명령을 실행합니다.

setspn -D <SPN> <AccountName>

비고

이 명령 <에서 SPN> 은 제거하려는 SPN을 나타냅니다. <AccountName> 은 SPN을 제거할 계정(또는 계정 중 하나)을 나타냅니다.

서비스 계정에 SPN 추가

계정에 SPN을 추가하려면 관리 명령 프롬프트에서 다음 명령을 실행합니다.

setspn -S \<SPN> \<AccountName>

비고

이 명령 <에서 SPN> 은 추가하려는 SPN을 나타냅니다. <AccountName> 은 SPN을 추가할 계정(또는 계정 중 하나)을 나타냅니다.

일관되지 않은 SPN 수정

올바른 SPN 버전을 확인합니다. 클라이언트가 요청한 버전 또는 서비스 계정에 구성된 버전입니다.

클라이언트가 잘못된 SPN을 요청하는 경우 클라이언트가 요청에 대한 SPN을 빌드하는 데 사용하는 정보를 확인하고 원본 정보가 올바른지 확인합니다. DNS는 이 정보의 일반적인 소스입니다. 다른 클라이언트(특히 비 브라우저 또는 사용자 지정 클라이언트)는 DNS 외에 다른 원본을 사용할 수 있습니다.

서비스 계정에서 잘못된 SPN을 사용하는 경우 서비스 계정에서 SPN을 제거한 다음 올바른 SPN을 추가합니다.

추가 정보

SPN은 ServiceClass>/<Host>:<Port>/,<ServiceName> 형식을 사용<하며 다음 구성 요소를 포함합니다.

  • <ServiceClass> (필수)는 서비스의 서비스 클래스를 나타냅니다.
  • <호스트> (필수)는 서비스를 실행하는 컴퓨터의 이름을 나타냅니다.
  • <포트> (선택 사항)는 서비스에서 사용하는 포트 번호를 나타냅니다.
  • <ServiceName> (선택 사항)은 서비스의 이름을 나타냅니다.

SPN의 서식을 지정하는 방법 및 선택적 매개 변수를 사용하는 경우에 대한 자세한 내용은 고유 SPN의 이름 형식을 참조하세요.