我想在我的 Windows 机器上对网站进行单点登录。我正在使用 Apache 的 Kerberos 身份验证模块。当只有一个网站时,这工作得很好。
这是当前配置:
.htaccess 文件:
RewriteEngine On
AuthType Kerberos
AuthName "Login"
KrbAuthRealms MY.DOMAIN.NAME
KrbServiceName HTTP/[email protected]
Krb5Keytab /etc/mykeytab.keytab
KrbMethodK5Passwd on
KrbAuthoritative on
KrbMethodNegotiate on
Require valid-user
为了使其正常工作,我需要使用以下命令在我的 Active Directory 控制器上创建一个 keytab 文件:
ktpass -out c:\temp\mykeytab.keytab
-princ HTTP/[email protected]
-mapUser user1
-mapOp set
-pass secret
-crypto AES256-SHA1
-pType KRB5_NT_PRINCIPAL
如上所述,到目前为止一切都运行良好。现在到了棘手的部分:
我想在同一台物理机器上建立第二个网站 (vhost),并使用相同的 Active Directory 用户 (user1)。我不在乎是否需要使用不同的服务主体名称 (SPN),或者是否可以使用与以前相同的名称。
新网站名为:
sub2.domain.com
并且该.htaccess
文件是
.htaccess 文件:
RewriteEngine On
AuthType Kerberos
AuthName "Login"
KrbAuthRealms MY.DOMAIN.NAME
KrbServiceName HTTP/[email protected]
Krb5Keytab /etc/mykeytab2.keytab
KrbMethodK5Passwd on
KrbAuthoritative on
KrbMethodNegotiate on
Require valid-user
我还创建了一个新的 keytab 文件,如下所示:
ktpass -out c:\temp\mykeytab2.keytab
-princ HTTP/[email protected]
-mapUser user1
-mapOp add
-pass secret
-crypto AES256-SHA1
-pType KRB5_NT_PRINCIPAL
-in c:\temp\mykeytab1.keytab
此密钥表文件现在包含映射到 user1 的两个 SPN。
打开两个网站时,只有 sub1 仍在工作,sub2 给出登录提示,即 SSO 不适用于 sub2。
不幸的是,尽管我使用了,但 apache2 日志文件不包含任何相关信息LogLevel debug
。
同时,我发现我的问题之一是密钥版本号 (kvno),它在两个密钥表和合并的密钥表文件中都不同。(两个条目都保留其原始 kvno,而较旧的 kvno 在较新的 kvno 激活后立即失效……)有没有办法在两个密钥表(或组合密钥表的两个条目)上使用相同的 kvno?顺便说一句,相应的错误日志消息是:
[auth_kerb:error] [pid 8222] [client 10.10.10.10:59840] gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information (, Key version number for principal in key table is incorrect)
有人知道为什么 sub2 不能正常工作而 sub1 可以吗?......我该怎么做才能获得相同的 kvnos?
最好的,汤姆
答案1
您的 KVNO(密钥版本号)似乎不正确。如果您使用 AD,则可以生成 KVNO 为 255 的密钥表(AD 不使用 KVNO)。您可以按照此处所述启用调试:Kerberos 故障排除 如果您发布跟踪文件的内容,我可能会知道更多信息。