我正在尝试使用 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 中所有密钥的有效性,以确保没有其他定时炸弹潜伏在周围。
希望这有帮助!