2016-09-13 7 views
3

여러 웹 서버 (srv1, srv2 등)에 동일한 HTTP 기반 응용 프로그램을 배포합니다. SPNEGO 인증을 사용하여 애플리케이션 보호. 서버는 Linux이고 AD는 존재를 알지 못합니다. 즉, 도메인에 가입되어 있지 않습니다. 단일 SPNEGO가 단일 호스트에서 원활하게 작동하도록했습니다. 이제 후속 호스트로 이동하십시오. 난 당신이 광고에서 광고 서버에서 생성 Kerberos/SPNEGO : 동일한 AD 계정에 대한 여러 SPN

  • SPN
  • 키 탭을 (

    1. 계정이 필요 당신을 말할 것이다 발견 한

      대부분의 가이드는 는 리눅스 호스트로 이동)

    (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의 여러 앱 서버와 단일 계정이 작동 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?

  • +0

    이유에 대해 잘 모르겠다 - JAAS 구성 파일은 시스템이 KDC에 제시 할 교장 (명시 적으로)과 "해시 암호"(키탭 파일에서)를 정의합니다. 귀하의 경우 KDC는 Active Directory이며, AD는 주체를 계정 ID로 사용하지 않습니다 **. 그것이 setspn 명령의 핵심입니다 : 계정 ID와 (목록의) SPN 사이에 1..N 매핑을 정의합니다. 나는'userPrincipalName' LDAP 필드가 빙산의 일각에 불과하다는 것을 알았습니다 ... 그리고 AD는 다른 ID를 사용하여 실제 ID에 대해 주체를 해석합니다. –

    +0

    그래, 아마 내 문제는 Tomcat과 AD 사이의 마지막 단계에서 무슨 일이 벌어지고 있는지 정말로 모른다는 것이다. – peterh

    +0

    오히려 중요한 것은 * AD 내부에서 일어나는 일입니다 - Tomcat은 포트 88에 연결하고 MIT Kerberos 서비스 인 것처럼 Microsoft Kerberos와 마찬가지로 일반 Kerberos 서비스를 제공합니다. –

    답변

    1

    간단히 말해서 네가 작동 할 것이고 나는 당신에게 어떻게 말할 것입니다. 무엇보다 먼저 질문이나 의견에 제대로 설명되지 않은 몇 가지 사항과 몇 가지 사항을 명확히 해두 자.

    같은 DNS 이름을 사용하는 세 대의 컴퓨터가 있습니다. 즉, DNS 라운드 로빈 : service.example .com은 부하에 따라 IP 또는로드 밸런서 (정렬 어려움)가 A 레코드에 대해 단 하나의 IP 일 경우 셔플 링 된 목록을 반환합니다. Kerberos의 경우 두 설정 모두 결과가 동일합니다. 이제 Kerberos 인증이 필요한 경우 AD가 서비스 또는 서버의 존재를 알 수 없다고 말할 수 없습니다. 그리고 이어야합니다. 그렇지 않으면 서버에 전달한 클라이언트의 서비스 티켓을 만들 수 없습니다. 또한 서비스 티켓이 계정의 장기 키로 암호화되어 있기 때문에 Tomcat will not contact KDC가 보안 컨텍스트를 수락합니다.

    여기에 접근법이 있습니다. 이미 하나의 SPN을 하나의 컴퓨터에 바인딩 할 수 있으며 여러 바인딩이 허용되지 않는다고 생각했습니다. 컴퓨터 계정 (srv1$ 등)에 바인딩 된 컴퓨터 이름이있는 경우입니다.서비스 계정이 필요합니다. 서비스 계정은 암호 만료가없는 일반 계정입니다 (예 : [email protected]). 이 계정의 경우 CNAME 또는 A 레코드를 바인딩합니다. 이 서비스 계정으로 모든 보안 컨텍스트를 받아들이려면 Tomcat 인증 자에게 요청해야합니다.

    유닉스 계열 OS에서이 마법 서비스 계정을 만드는 방법은 무엇입니까? 사용 mskutil

    1. 로는
    2. 는 해당 서비스 계정에 대한 키 탭을 생성하는 서비스 계정에 대한 SPN 바인드
    3. 을 서비스 계정을 생성하고 키 탭이 업데이트되었습니다.

    그런 다음 사용하기에 적합한 키탭이 있습니다. 계정이 존재하는 LDAP 쿼리 (예 : Softerra의 LDAP 브라우저 또는 기타 포함)로 SPN (servicePrincipalName)이 해당 계정에 바인딩되고 완료되었는지 확인합니다.

    중요 사항 : 클라이언트 중 하나가 MIT Kerberos 또는는 Heimdal 사용하는 경우, 당신은 해야은 당신의 krb5.confrdns = false을 설정합니다.

    Godspeed!

    +0

    실제로 세 서버가 DNS에서 같은 이름을 가지고 있다고 말하지 않았습니다. 링크 된 그림은 Tomcat이 어떻게 작동 하는지를 나타내지 않습니다. * AD에 연락 할 것입니다. 왜 내가 모르는거야. 마지막으로. 귀하가 말하는 서비스 계정 : "이 계정의 경우 CNAME 또는 A 레코드를 바인딩합니다". Firefox와 같은 일부 브라우저는 A 레코드 (항상!)에서 서비스 이름을 생성하므로 일부 브라우저에서만 이러한 방식의 호환성이 보장되므로 A 레코드가 필요하다는 것을 알고 있습니다. – peterh

    +0

    @peterh Tomcat이 AD에 연락하게 될 것이라고 생각합니까? 당신이 Wireshark에서 그것을 보지 않는 한, 그것은 틀린 채로 남아 있습니다. –

    +1

    @ Michael-O는 정확합니다. 응용 프로그램 서버는 Kerberos 인증을 위해 AD에 절대 연결하지 않습니다. –