使用 mod_auth_kerb 的 apache 总是要求输入两次密码

使用 mod_auth_kerb 的 apache 总是要求输入两次密码

(Debian 压缩)

我正在尝试设置 apache 以使用 Kerberos 身份验证来允许 AD 用户登录。它可以工作,但会两次提示用户输入用户名和密码,第一次被忽略(无论输入什么。)只有第二次提示包含来自配置的 AuthName 字符串(即:第一个窗口是通用用户名/密码,第二个窗口包含标题“Kerberos 登录”)我并不担心集成窗口身份验证在此阶段是否有效,我只是希望用户能够使用他们的 AD 帐户登录,这样我们就不需要设置第二个用户帐户存储库。

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

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)

答案1

我不知道您是否还需要答案,但我希望通过分享我的经验来帮助其他人。我相信如果您按照这些步骤操作,一切都会顺利进行。

  1. 确保您有正确的 DNS 条目SYD01TBUG02(A 记录)您的 DNS 服务器上指向您的 Web 服务器
  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 用户密码。我们使用-加密全部选项以确保我们将所有支持的哈希值添加到密钥表文件中。
  4. 现在你应该复制生成的SYD01TBUG02.密钥表将文件复制到您的网络服务器并将其复制到特定目录。例如,让我们将其复制到/etc/apache2/keytab/文件夹。
  5. webservice 的 apache 配置文件示例:
    <VirtualHost *: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]
        
        <Location "/">
            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>
        <Directory />
        </Directory>
    </VirtualHost> 
    
  6. 重新加载或者重启 apachesudo service apache2 reload
  7. 现在,如果您在浏览器地址栏中输入 http://SYD01TBUG02/,您将自动通过 SSO 登录到您的 Web 服务(Chrome、类似 Chromium 的浏览器和 IE 都支持开箱即用的 SSO,但还有一个Firefox 插件)。

希望这将有助于在 Web 服务器上设置您的 Kerberos 身份验证。

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

答案2

这是因为用户第一次输入 u/p 时,会向服务器发送一个 ntlm 令牌。第二次输入时,它才是正确的 kerberos 令牌。

不幸的是,你没有办法消除第一个提示。

答案3

如果单点登录不是必需的,您可以通过设置“KrbMethodNegotiate off”来禁用协商。这将为您提供单一的基本登录,并避免每次交易的额外 GET 请求。

相关内容