Apache 2.2 mod_auth_kerb SSO перестал работать
У меня нет идей, почему он просто перестал работать, вот что я проверил:
HTTPD-error.log:
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1758): [client 10.105.5.131] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1758): [client 10.105.5.131] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1264): [client 10.105.5.131] Acquiring creds for HTTP/<FQDN>@<LOCAL.DOMAIN>
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1411): [client 10.105.5.131] Verifying client data using KRB5 GSS-API
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1427): [client 10.105.5.131] Client didn't delegate us their credential
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1446): [client 10.105.5.131] GSS-API token of length 22 bytes will be sent back
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1758): [client 10.105.5.131] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1264): [client 10.105.5.131] Acquiring creds for HTTP/<FQDN>@<LOCAL.DOMAIN>
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1411): [client 10.105.5.131] Verifying client data using KRB5 GSS-API
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1427): [client 10.105.5.131] Client didn't delegate us their credential
[Thu Jun 11 18:04:21 2015] [debug] src/mod_auth_kerb.c(1125): [client 10.105.5.131] GSS-API major_status:00090000, minor_status:00000000
-
sudo kinit -t /etc/krb5.keytab HTTP/<FQDN>
работает отлично, ошибок нет
sudo klist:
Credentials cache: FILE:/tmp/krb5cc_0
Principal: HTTP/<FQDN>@<LOCAL.DOMAIN>
Issued Expires Principal
Jun 11 17:21:58 2015 Jun 12 00:01:57 2015 krbtgt/<LOCAL.DOMAIN>@<LOCAL.DOMAIN>
krb5.conf
[libdefaults]
ticket_lifetime = 24000
default_realm = <LOCAL.DOMAIN>
dns_lookup_realm = false
dns_lookup_kdc = false
default_keytab_name = /etc/krb5.keytab
rdns = false
[realms]
KC.KPLUS = {
kdc = <dc.ip>:88
admin_server = <dc.ip>:88
default_domain = <LOCAL.DOMAIN>
}
[domain_realm]
.<local.domain> = <LOCAL.DOMAIN>
<local.domain> = <LOCAL.DOMAIN>
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
.htaccess
AddHandler cgi-script .cgi .pl
Options +ExecCGI
DirectoryIndex index.pl
AuthName "<LOCAL.DOMAIN>"
AuthType Kerberos
Krb5Keytab /etc/krb5.keytab
KrbAuthRealm <LOCAL.DOMAIN>
KrbMethodNegotiate on
KrbServiceName HTTP/<FQDN>@<LOCAL.DOMAIN>
KrbMethodK5Passwd off
KrbSaveCredentials on
KrbVerifyKDC off
Require valid-user
Проверил трафик на стороне клиента, по-видимому, он начинает переговоры, соглашается с мехом KRB5 и отправляет билет. Получает 401 в результате.
Я не могу понять, что здесь не так, любые идеи будут оценены.
2 ответа
Это происходит, когда существует несоответствие между именами SPN, указанными в таблице ключей, и основным именем, предоставленным клиентом (браузером).
Это может зависеть от используемого браузера (некоторые браузеры берут имя из URL, другие делают обратный поиск IP-адреса, к которому они подключаются).
Распространенным решением для этого является установка KrbServiceName в Any:
KrbServiceName Any
Это ослабит проверку, позволяя использовать любой ключ в таблице ключей сервера.
Если вы используете Debian, вы недавно обновились с wheezy до jessie?. У меня была похожая проблема, и было то, что некоторые директивы ldap (AuthzLDAPAuthoritative) для модуля apache 2.2 (wheezy) были удалены в модуле apache 2.4 (jessie) ( Обновление до 2.4 с 2.2). Может быть, то же самое происходит с Kerberos.