CAS с SPNEGO всегда возвращается к NTLM

мы уже используем CAS в нашей «внутренней» сети с Kerberos на одном сайте, и он работает без проблем.

Теперь мы хотим настроить второй сайт самостоятельно, но с немного другой конфигурацией (DNS-имена/SPN).

Я пытаюсь объяснить.. Сначала нерабочий конфиг, а потом рабочий конфиг с небольшими изменениями..

Мы пытаемся запустить CAS с помощью SPNEGO.

Мы можем использовать kinit (команда linux) с cas.keytab и получить действительный билет Kerberos от kdc of REALM2.DE, но это не работает с CAS. CAS всегда возвращается к NTLM. Что нам нужно сделать, чтобы это сработало? Возможно, он использует неправильную запись SPN из keytab? Я не могу понять.

  • Ubuntu 16 LTS и Ubuntu 18 LTS
  • КАС: 5.2.7
  • REALM1 = Windows Active Directory (есть пользователи)
  • REALM2 = MIT Linux Kerberos Realm (есть сервер CAS)
  • acme.de = Интернет-домен для официального SSL-сертификата
  • REALM Доверительные отношения между REALM1 и REALM2 работают.

Описание не работающей конфигурации:

Имя участника-службы похоже на HTTP/[email protected]

/etc/krb5.conf:

    [libdefaults]
    default_keytab_name = /etc/cas/cas.keytab
    [realms]
    REALM1.DE = {
            kdc = ad1.realm1.de
            kdc = ad2.realm1.de
            kdc = ad3.realm1.de
    }
    REALM2.DE = {
            kdc = kerberos.realm2.de
            kdc = kerberos-1.realm2.de
            kdc = kerberos-2.realm2.de
            admin_server = kadmin.realm2.de
    }

cas.properties:

           cas.server.name=https://cas.acme.de:8443
           cas.server.prefix=https://cas.acme.de:8443/cas
           cas.authn.attributeRepository.defaultAttributesToRelease=cn,givenName,uid,mail
           # KERBEROS / SPNEGO
           cas.authn.spnego.kerberosConf=/etc/krb5.conf
         # cas.authn.spnego.mixedModeAuthentication=false
           cas.authn.spnego.mixedModeAuthentication=true
           cas.authn.spnego.cachePolicy=600
           cas.authn.spnego.timeout=300000
           cas.authn.spnego.jcifsServicePrincipal=HTTP/[email protected]
           cas.authn.spnego.jcifsNetbiosWins=
           cas.authn.spnego.loginConf=/etc/cas/login.conf
           cas.authn.spnego.ntlmAllowed=true
           cas.authn.spnego.hostNamePatternString=.+
           cas.authn.spnego.jcifsUsername=
           cas.authn.spnego.useSubjectCredsOnly=false
           cas.authn.spnego.supportedBrowsers=MSIE,Trident,Firefox,AppleWebKit
           cas.authn.spnego.jcifsDomainController=
           cas.authn.spnego.dnsTimeout=2000
           cas.authn.spnego.hostNameClientActionStrategy=hostnameSpnegoClientAction
           cas.authn.spnego.kerberosKdc=192.169.1.3
           cas.authn.spnego.alternativeRemoteHostAttribute=alternateRemoteHeader
           cas.authn.spnego.jcifsDomain=
           cas.authn.spnego.ipsToCheckPattern=
           cas.authn.spnego.kerberosDebug=
           cas.authn.spnego.send401OnAuthenticationFailure=true
           cas.authn.spnego.kerberosRealm=REALM2.DE
           cas.authn.spnego.ntlm=false
           cas.authn.spnego.principalWithDomainName=true
           cas.authn.spnego.jcifsServicePassword=
           cas.authn.spnego.jcifsPassword=
           cas.authn.spnego.spnegoAttributeName=userPrincipalName
           cas.authn.spnego.name=

/etc/cas/login.conf:

    jcifs.spnego.initiate {
              com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="/etc/cas/cas.keytab";
    };

   jcifs.spnego.accept {
             com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="/etc/cas/cas.keytab";
    };

cas.keyвкладка:

   root@cas:/etc/cas# klist -k /etc/cas/cas.keytab -e -t
   Keytab name: FILE:/etc/cas/cas.keytab

   KVNO Timestamp           Principal
   ---- ------------------- ------------------------------------------------------
   2 17.05.2019 11:38:56 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
   2 17.05.2019 11:38:56 HTTP/[email protected] (aes128-cts-hmac-sha1-96)
   2 17.05.2019 11:38:56 HTTP/[email protected] (arcfour-hmac)
   2 17.05.2019 11:39:03 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
   2 17.05.2019 11:39:03 HTTP/[email protected] (aes128-cts-hmac-sha1-96)
   2 17.05.2019 11:39:03 HTTP/[email protected] (arcfour-hmac)

kinit HTTP/[email protected] -k -t /etc/cas/cas.keytab
klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP/[email protected]
Valid starting       Expires              Service principal
04.12.2019 12:54:18  05.12.2019 12:54:18  krbtgt/[email protected]

root@cas:/etc/cas# nslookup cas.acme.d
Server:         192.169.1.1
Address:        192.169.1.1#53

Name:   cas.acme.de
Address: 192.169.1.140

root@cas:/etc/cas# nslookup 192.169.1.140
140.1.169.192.in-addr.arpa      name = cas.realm2.de.

Описание рабочей конфигурации:

Только SPN и DNS-имя в Интернете изменены

Имя участника-службы похоже на HTTP/[email protected]

/etc/krb5.conf:

   [libdefaults]
   default_keytab_name = /etc/cas/cast.keytab

   [realms]
   REALM1.DE = {
            kdc = ad1.realm1.de
            kdc = ad2.realm1.de
            kdc = ad3.realm1.de
    }
    REALM2.DE = {
            kdc = kerberos.realm2.de
            kdc = kerberos-1.realm2.de
            kdc = kerberos-2.realm2.de
            admin_server = kadmin.realm2.de
    }

cas.properties:

 cas.server.name=https://cast.realm2.de:8443
 cas.server.prefix=https://cast.realm2.de:8443/cas   
 # KERBEROS / SPNEGO
 cas.authn.spnego.kerberosConf=/etc/krb5.conf
#cas.authn.spnego.mixedModeAuthentication=false
 cas.authn.spnego.mixedModeAuthentication=true
 cas.authn.spnego.cachePolicy=600
 cas.authn.spnego.timeout=300000
 cas.authn.spnego.jcifsServicePrincipal=HTTP/[email protected]
 cas.authn.spnego.jcifsNetbiosWins=
 cas.authn.spnego.loginConf=/etc/cas/login.conf
 cas.authn.spnego.ntlmAllowed=true
 cas.authn.spnego.hostNamePatternString=.+
 cas.authn.spnego.jcifsUsername=
 cas.authn.spnego.useSubjectCredsOnly=false
 cas.authn.spnego.supportedBrowsers=MSIE,Trident,Firefox,AppleWebKit
 cas.authn.spnego.jcifsDomainController=
 cas.authn.spnego.dnsTimeout=2000
 cas.authn.spnego.hostNameClientActionStrategy=hostnameSpnegoClientAction
 cas.authn.spnego.kerberosKdc=192.169.1.3
 cas.authn.spnego.alternativeRemoteHostAttribute=alternateRemoteHeader
 cas.authn.spnego.jcifsDomain=
 cas.authn.spnego.ipsToCheckPattern=
 cas.authn.spnego.kerberosDebug=
 cas.authn.spnego.send401OnAuthenticationFailure=true
 cas.authn.spnego.kerberosRealm=REALM2.DE
 cas.authn.spnego.ntlm=false
 cas.authn.spnego.principalWithDomainName=true
 cas.authn.spnego.jcifsServicePassword=
 cas.authn.spnego.jcifsPassword=
 cas.authn.spnego.spnego

/etc/cas/login.conf:

 jcifs.spnego.initiate {
   com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="/etc/cas/cas-t.keytab";
};

 jcifs.spnego.accept {
   com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="/etc/cas/cas-t.keytab";
}; 

cast.keyвкладка:

klist -k cas-t.keytab -e -t
Keytab name: FILE:cas-t.keytab

KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
2 04.10.2018 11:17:39 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
2 04.10.2018 11:17:39 HTTP/[email protected] (aes128-cts-hmac-sha1-96)
2 04.10.2018 11:17:39 HTTP/[email protected] (arcfour-hmac)
2 04.10.2018 11:17:42 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
2 04.10.2018 11:17:43 HTTP/[email protected] (aes128-cts-hmac-sha1-96)
2 04.10.2018 11:17:43 HTTP/[email protected] (arcfour-hmac)

kinit HTTP/[email protected] -k -t ./cas-t.keytab
klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP/[email protected]

Valid starting       Expires              Service principal
04.12.2019 12:33:51  05.12.2019 12:33:51  krbtgt/[email protected]

root@cas:/etc/cas# nslookup cast.realm2.de
Server:         192.169.1.1
Address:        192.169.1.1#53

Name:   cast.realm2.de
Address: 192.169.1.65

root@cas:/etc/cas# nslookup 192.169.1.65
65.1.169.192.in-addr.arpa       name = cast.realm2.de.

Мы уже пытались выполнить отладку самостоятельно, но не смогли.

Мы надеемся, что кто-нибудь поможет нам решить эту проблему.

Пожалуйста, дайте нам знать, если вам нужна дополнительная информация

Спасибо!


person aexlz    schedule 04.12.2019    source источник
comment
Когда вы говорите, что всегда откатываетесь к NTLM, каким образом происходит откат? Включен ли первоначальный билет Curb в токен SPNEGO, и CAS дает сбой, заставляя его вернуться к NTLM, или токен SPNEGO всегда включает только токен NTLM?   -  person Steve    schedule 04.12.2019
comment
Привет, @Steve, извини за недоразумение. Проблема в том, что билет Curb не создается от имени CAS. CAS должен/должен выполнить kerb-auth.   -  person aexlz    schedule 05.12.2019
comment
Проблема в том, что разрешенное имя участника-службы не может быть найдено в области KDC, которая, по его мнению, владеет именем участника-службы. Я бы порекомендовал использовать что-то вроде wireshark, чтобы проверить, какой SPN на самом деле отправляется в KDC, и убедиться, что либо а) этот SPN зарегистрирован, либо б) что он выполняет правильный переход области.   -  person Steve    schedule 05.12.2019


Ответы (1)


Углубившись в Wireshark, мы смогли решить проблему. На самом деле это была не проблема CAS, а проблема KDC-Realm.

Клиент получил неправильную область, обратившись к cas-серверу. Браузер клиента попытался запросить windows-kdc и не смог получить билет службы для данного SPN.

После использования:

ksetup /AddHostToRealmMap <host name of CAS> <realm>

чтобы заставить клиента запрашивать правильный linux-kdc, сервисный билет был успешно запрошен, и CAS-аутентификация работала хорошо.

Спасибо @Steve за «б) то, что он делает правильный переход между мирами»…

person aexlz    schedule 10.12.2019