Apache/mod_auth_gss 身份验证失败

Apache/mod_auth_gss 身份验证失败

抱歉,如果这是错误的 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 选项可以将其设置为临时的。

再见!

相关内容