여러 웹 서버 (srv1
, srv2
등)에 동일한 HTTP 기반 응용 프로그램을 배포합니다. SPNEGO 인증을 사용하여 애플리케이션 보호. 서버는 Linux이고 AD는 존재를 알지 못합니다. 즉, 도메인에 가입되어 있지 않습니다. 단일 SPNEGO가 단일 호스트에서 원활하게 작동하도록했습니다. 이제 후속 호스트로 이동하십시오. 난 당신이 광고에서 광고 서버에서 생성 Kerberos/SPNEGO : 동일한 AD 계정에 대한 여러 SPN
- 계정이 필요 당신을 말할 것이다 발견 한
대부분의 가이드는 는 리눅스 호스트로 이동)
(2) + (3)은 항상 서버 단위 일 필요가 있다고 생각하지만 (1)에 대해서는 다소 불확실합니다. 하나의 계정으로 만 할 수 있습니까? 내가 한 명만 할 수 있다면 AD에이 모든 계좌를 갖고 싶지 않을 것입니다.
This blog는 그것을 할 수있는 방법에 대한 좋은 요리법이 있습니다 (srv1
에 대한) ktpass
의 첫 번째 호출을 당신이 인터넷에서 찾을 모든 가이드에 설명 된대로해야한다, 그러나 이후의 호출 (대한 srv2
, srv3
등)는 -setpass 및 -setupn 옵션을 사용해야합니다.
그러나 ktpass.exe
도구를 사용하면 계정의 userPrincipalName
특성이 마지막 호출에서 princ 인수에 의해 주어진대로 변경됩니다. ktpass
입니다. 그래서 srv의 이름입니다. srv3
은 기본적으로 ktpass를 호출 할 때마다 이름 및 계정 이름이 기본적으로 변경됩니다. 웹 서버가 자격 증명으로 키탭을 사용하여 AD에 연락하는 이벤트의 SPNEGO 체인에서 마지막 단계를 수행하면 userPrincipalName
이 SPN과 동일한 AD 계정을 찾게되므로이 단계는 실패합니다. (source, 마지막 게시물로 스크롤, 항목 3을 나열). 이 점을 반박하는 것은 Tomcat과 JAAS를 사용하고 있으며, 내가 이해할 수있는 한 hardcode the principal name to use in my jaas.conf
file을 사용하여 keytab에서 핵심 이름을 효과적으로 무시할 수 있다는 것입니다.
AD의 여러 앱 서버와 단일 계정이 작동 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?
이유에 대해 잘 모르겠다 - JAAS 구성 파일은 시스템이 KDC에 제시 할 교장 (명시 적으로)과 "해시 암호"(키탭 파일에서)를 정의합니다. 귀하의 경우 KDC는 Active Directory이며, AD는 주체를 계정 ID로 사용하지 않습니다 **. 그것이 setspn 명령의 핵심입니다 : 계정 ID와 (목록의) SPN 사이에 1..N 매핑을 정의합니다. 나는'userPrincipalName' LDAP 필드가 빙산의 일각에 불과하다는 것을 알았습니다 ... 그리고 AD는 다른 ID를 사용하여 실제 ID에 대해 주체를 해석합니다. –
그래, 아마 내 문제는 Tomcat과 AD 사이의 마지막 단계에서 무슨 일이 벌어지고 있는지 정말로 모른다는 것이다. – peterh
오히려 중요한 것은 * AD 내부에서 일어나는 일입니다 - Tomcat은 포트 88에 연결하고 MIT Kerberos 서비스 인 것처럼 Microsoft Kerberos와 마찬가지로 일반 Kerberos 서비스를 제공합니다. –