Apache使用mod_auth_kerb总是要求密码两次

(Debian Squeeze)

我试图设置Apache以使用Kerberos身份validation,以允许AD用户login。它正在工作,但提示用户两次input用户名和密码,第一次被忽略(不pipe是什么放在里面。 )只有第二个提示包括从configuration的AuthNamestring(即:第一个窗口是一个通用的用户名/密码之一,第二个包括标题“Kerberoslogin”)我不担心集成的Windows身份validation在这个阶段工作,我只是希望用户能够使用他们的AD帐户login,所以我们不需要build立第二个用户帐户存储库。

我该如何解决这个问题,以消除第一个无用的提示?

apache2.conf文件中的指令:

<Directory /var/www/kerberos> AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms ONEVUE.COM.AU.LOCAL Krb5KeyTab /etc/krb5.keytab KrbServiceName HTTP/[email protected] require valid-user </Directory> 

krb5.conf的:

 [libdefaults] default_realm = ONEVUE.COM.AU.LOCAL [realms] ONEVUE.COM.AU.LOCAL = { kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL master_kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL admin_server = SYD01PWDC01.ONEVUE.COM.AU.LOCAL default_domain = ONEVUE.COM.AU.LOCAL } [login] krb4_convert = true krb4_get_tickets = false 

访问安全目录时的访问日志(注意两个独立的401)

 192.168.10.115 - - [24/Aug/2012:15:52:01 +1000] "GET /kerberos/ HTTP/1.1" 401 710 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1" 192.168.10.115 - - [24/Aug/2012:15:52:06 +1000] "GET /kerberos/ HTTP/1.1" 401 680 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1" 192.168.10.115 - [email protected] [24/Aug/2012:15:52:10 +1000] "GET /kerberos/ HTTP/1.1" 200 375 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1" 

还有一行error.log

 [Fri Aug 24 15:52:06 2012] [error] [client 192.168.0.115] gss_accept_sec_context(2) failed: An unsupported mechanism was requested (, Unknown error) 

这是因为用户第一次inputu / p时,会将ntlm令牌发送给服务器。 第二次是正确的kerberos令牌。

不幸的是,你不可能消除第一个提示。

我不知道你是否仍然需要这个答案,但是我希望能通过分享我的经验来帮助别人。 我相信如果你遵循这些步骤,一切都会正常工作。

  1. 确保您的DNS服务器上的SYD01TBUG02 (Alogging)指向您的networking服务器有适当的DNS条目
  2. 确保你有你的web服务的SPN和AD用户之间的协作。 在AD服务器上运行以下命令:

    setspn -A HTTP/SYD01TBUG02.onevue.com.au.local ad_username

  3. 确保你有适当的密钥表生成。 在你的AD服务器上运行这个命令:

    ktpass -princ HTTP/[email protected] -mapuser ad_username -pass xxxxxx -crypto ALL -ptype KRB5_NT_PRINCIPAL -out SYD01TBUG02.keytab -setupn -setpass

    其中xxxxxx是AD用户密码。 我们使用-crypto ALL选项来确保将所有支持的散列添加到keytab文件中。

  4. 现在,您应该将生成的SYD01TBUG02.keytab文件复制到您的networking服务器并将其复制到特定的目录。 例如,让我们将其复制到/ etc / apache2 / keytab /文件夹中。
  5. web服务的apacheconfiguration文件示例:
     &ltVirtualHost *:80> DocumentRoot "/var/www/kerberos" ServerName SYD01TBUG02.onevue.com.au.local ServerAlias SYD01TBUG02 AddDefaultCharset UTF-8 DirectoryIndex index.php ErrorLog /var/log/apache2/error_SYD01TBUG02.log TransferLog /var/log/apache2/transfer_SYD01TBUG02.log LogLevel warn ServerAdmin [email protected] &ltLocation "/"> AuthType Kerberos KrbAuthRealms ONEVUE.COM.AU.LOCAL KrbServiceName HTTP/[email protected] Krb5Keytab /etc/apache2/keytab/SYD01TBUG02.keytab KrbMethodNegotiate on KrbMethodK5Passwd on KrbVerifyKDC on require valid-user </Location> &ltDirectory /> </Directory> </VirtualHost> 
  6. 重新加载或重新启动Apache的sudo service apache2 reload

  7. 现在,如果您在浏览器地址栏中键入http:// SYD01TBUG02 /,您将通过SSO自动login您的Web服务(Chrome,Chromium-like浏览器和IE支持SSO开箱即用,但也有一个Firefox插件 )。

希望这将有助于在Web服务器上设置Kerberos身份validation。

PS如果你想通过完整的地址启用SSO(例如SYD01TBUG02.onevue.com.au.local ),你应该通过AD组策略将SYD01TBUG02.onevue.com.au.local添加到Intranet区域(如果你需要这个机器在域中)或本地通过Internet Explorer设置。 这些设置会影响系统中安装的所有浏览器。

如果单点login不是必需的,您可以通过设置'KrbMethodNegotiate off'禁用协商。 这会给你一个单一的基本login,并避免每个事务的额外GET请求。