Apache 和 Kerberos 的 SSO 问题

Apache 和 Kerberos 的 SSO 问题

我正在尝试使用 Kerberos 在我的 Apache Web 服务器上设置 SSO,以便登录到本地域的用户能够被识别并立即登录。

我已经关注本指南但一旦一切设置完毕,我就无法摆脱用户/密码提示。

我正在使用 Ubuntu 8.04,已经为 Apache 安装了 mod_auth_kerb 5.4。

我的 /etc/krb5.conf:

[libdefaults]
  default_realm = COMPANY.LOCAL
[domain_realm]
  .company.local = COMPANY.LOCAL
  company.local = COMPANY.LOCAL
[realms]
  COMPANY.LOCAL = {
    default_domain = company.local
    kdc = DC01.COMPANY.LOCAL:88
    admin_server = DC01.COMPANY.LOCAL
  }

我的 Apache 配置:

<Location />
AuthType Kerberos
AuthName "server login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms COMPANY.LOCAL
KrbServiceName HTTP
Krb5KeyTab /etc/apache2/httpd.keytab
KrbVerifyKDC off
KrbLocalUserMapping on
require valid-user
</Location>

Keytab 由我们的管理员使用以下方式生成

ktpass -princ HTTP/[email protected] -mapuser hostname -crypto rc4-hmac-nt -ptype KRB5_NT_SRV_HST -pass CHOOSEPASSWORD -out httpd.keytab

我已经发出了相关的 chmod/chown 命令。在服务器上,我成功发出并登录。kinit HTTP/[email protected]

kvno/klist输出:

# kvno HTTP/[email protected]
HTTP/[email protected]: kvno = 8
# klist -ke httpd.keytab
Keytab name: FILE:httpd.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   8 HTTP/[email protected] (ArcFour with HMAC/md5)

我已经配置了我的浏览器(在 Windows7 上尝试了 ff 和 ie)来传递凭据,希望摆脱提示,但它不起作用。

Apache 错误日志显示:

[error] [client 10.0.0.1] gss_accept_sec_context() failed: Unspecified GSS failure.  Minor code may provide more information (, Key version number for principal in key table is incorrect)
[error] [client 10.0.0.1] gss_accept_sec_context() failed: Invalid token was supplied (, No error)

有人对我需要做什么来实现这个功能有什么建议吗?

答案1

如果我对错误的解释正确的话,我思考这意味着您在 /etc/apache2/httpd.keytab 中有一个旧版本的密钥。每次通过 kadmin 为 Kerberos 主体更改密钥时,版本号都会递增,并且该密钥的旧版本将失效。

command kinit/login 仅显示 /etc/krb5.keytab 中的主机密钥完好无损。这并不一定意味着 httpd.keytab 中的 kvno 有效,您需要根据 KDC 进行检查。

针对您的 KDC 启动 kadmin 会话并调用getprinc <principalname>。查找“Key: vno”,这会告诉您 KDC 认为的版本号。如果 KDC 有较新版本的密钥,则需要将此密钥重新导出到相关主机。我会继续检查 /etc/krb5.keytab 中所有密钥的有效性,以确保没有其他定时炸弹潜伏在周围。

希望这有帮助!

相关内容