抱歉,如果这是错误的 stackexchange 网站。
根据文档(作为参考,我也使用了这篇博文)我在httpd.conf中有这个:
# Increase max size of HTTP request headers so we are sure it can hold any SPNEGO token.
LimitRequestFieldSize 12392
# Load the module
LoadModule auth_gss_module /apps/apache2/modules/mod_auth_gss.so
# Set general log level so we get some output
LogLevel debug
<Directory "/var/www/secured">
Order allow,deny
Allow from all
AuthType GSSAPI
AuthGSSServiceName HTTP
AuthGSSKeytabFile /path/to/keytab/servername.keytab
#AuthGSSStripDomainBS On
#AuthGSSStripDomainAT On
AuthGSSForceCase upper
AuthGSSDebug On
require valid-user
</Directory>
当我点击该页面时,浏览器中显示“未授权”,并且在 apache error_log 中显示以下内容:
tail -f logs/error_log
[authz_core:debug] [pid 3657:tid 27] mod_authz_core.c(802): [client 10.138.48.42:1432] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[core:debug] [pid 3657:tid 27] mod_auth_gss.c(620): [client 10.138.48.42:1432] gss_authenticate: type = GSSAPI
[core:debug] [pid 3657:tid 27] mod_auth_gss.c(334): [client 10.138.48.42:1432] authenticate_user_gss called
[core:debug] [pid 3657:tid 27] mod_auth_gss.c(373): [client 10.138.48.42:1432] Using keytab: KRB5_KTNAME=/path/to/keytab/servername.keytab
[core:debug] [pid 3657:tid 27] mod_auth_gss.c(411): [client 10.138.48.42:1432] Client wants GSS mech: <unknown>
[core:debug] [pid 3657:tid 27] mod_auth_gss.c(288): [client 10.138.48.42:1432] acquire_server_creds for HTTP@servername
[core:debug] [pid 3657:tid 27] mod_auth_gss.c(438): [client 10.138.48.42:1432] got server creds for: HTTP/servername.testdomain.local@
[core:error] [pid 3657:tid 27] [client 10.138.48.42:1432] gss_accept_sec_context() failed: Invalid token was supplied (No error)
[core:debug] [pid 3657:tid 27] mod_auth_gss.c(650): [client 10.138.48.42:1432] Authentication failed.
[core:debug] [pid 3657:tid 27] mod_auth_gss.c(592): [client 10.138.48.42:1432] note_gss_auth_failure: auth_name = <undefined>
我注意到我似乎acquire_server_creds for HTTP@servername
但是got server creds for: HTTP/servername.testdomain.local@
。我不知道从哪里开始寻找。
这是一个 Solaris 10 盒子,其中 Apache 2.4 尝试与 Windows 2008 域服务器通信。
Solaris 服务器上的 Hosts 文件:
XXX.XXX.XXX.XXX servername.testdomain.local servername
不/etc/hostname
存在文件。
答案1
阿瓦兰斯,
我是您所引用的博客文章的作者。
您评论的问题通常是因为 kerberos 实现使用系统获得的第一个名称(通常是 /etc/hosts 文件中的第一个条目)。发生的情况是,您拥有具有完全限定名称的 keytab,而第一个主机条目是未限定的名称。在这些条目中,我在三个地方配置了完全限定名称:keytab、/etc/hosts 中的第一个条目和机器的主机名(/etc/hostname)。
如果您查看之前的条目,我评论说我遇到了同样的问题。
答案2
您的 /etc/hosts 没问题(第一个是完全限定名称)。检查机器中的主机名是短名称还是完全限定名称。只需执行 hostname 并检查响应即可。
如果名称是短名称,请尝试将主机名更改为完全限定名称:
主机名服务器名.测试域.本地
我认为有一个 -t 选项可以将其设置为临时的。
再见!