我试图让Ubuntu 12.04上的Apache通过Kerberos SSO将用户身份validation到Windows 2008 Active Directory服务器。 以下是一些使我的情况不同的事情:
我没有Windows服务器的pipe理权限(我也没有权限访问)。 我也不能对我的服务器做任何修改。
我已经使用PBIS打开,将Ubuntu服务器joinActive Directory。
用户可以使用他们的AD证书login到Ubuntu服务器。 kinit也适用于每个用户。
由于我无法更改AD(除了添加新机器和SPN),我无法在Ubuntu上添加Apache的服务帐户。
由于我无法添加I服务帐户,因此我必须使用机器密钥表(/etc/krb5.keytab),或者至less在另一个密钥表中使用机器密码。 现在我正在使用机器keytab,并给予Apache只读访问(坏主意,我知道)。
我已经使用net ads keytab添加了HTTP -U
由于我使用的是Ubuntu 12.04,在“net ads keytab add”中添加的唯一编码types是arcfour-hmac,des-cbc-crc和des-cbc-md5。 当PBISjoin域时,PBIS将AES编码types添加到主机和cifs主体,但是我还没有得到“net ads keytab add”来执行此操作。
ktpass和setspn是不可能的,因为上面的#1。
我已经configuration(用于Kerberos SSO)并testing了IE 8 Firefox。
我在我的Apache站点configuration中使用以下configuration:
<Location /secured> AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/krb5.keytab KrbLocalUserMapping On require valid-user </Location>
当Firefox尝试连接时,在Apache的error.log(LogLevel debug)中获取以下内容:
[Wed Oct 23 13:48:31 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos [Wed Oct 23 13:48:31 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured [Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos [Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(994): [client 192.168.0.2] Using HTTP/[email protected] as server principal for password verification [Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(698): [client 192.168.0.2] Trying to get TGT for user [email protected] [Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(609): [client 192.168.0.2] Trying to verify authenticity of KDC using principal HTTP/[email protected] [Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(652): [client 192.168.0.2] krb5_rd_req() failed when verifying KDC [Wed Oct 23 13:48:37 2013] [error] [client 192.168.0.2] failed to verify krb5 credentials: Decrypt integrity check failed [Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(1073): [client 192.168.0.2] kerb_authenticate_user_krb5pwd ret=401 user=(NULL) authtype=(NULL) [Wed Oct 23 13:48:37 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured
当IE 8试图连接时,我得到:
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos [Wed Oct 23 14:03:30 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured [Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos [Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1240): [client 192.168.0.2] Acquiring creds for HTTP@apache_server [Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1385): [client 192.168.0.2] Verifying client data using KRB5 GSS-API [Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1401): [client 192.168.0.2] Client didn't delegate us their credential [Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1420): [client 192.168.0.2] GSS-API token of length 9 bytes will be sent back [Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1101): [client 192.168.0.2] GSS-API major_status:000d0000, minor_status:000186a5 [Wed Oct 23 14:03:30 2013] [error] [client 192.168.0.2] gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information (, ) [Wed Oct 23 14:03:30 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured
让我知道如果你想要更多的日志和configuration文件 – 最初的问题是足够长的时间。
我没有在Apache中设置kerberos委派的经验,但是我很确定apache中定义的服务名称需要与keytab文件中的服务名称匹配。
像这样明确地设置服务名称:
<Location /secured> AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/krb5.keytab KrbLocalUserMapping On KrbServiceName HTTP/apache_server.DOMAIN.com require valid-user </Location>
AD中的计算机帐户需要设置HTTP/apache_server.DOMAIN.com SPN,但听起来你已经有了这个地方
上面的答案是正确的,但不幸的是,您必须使用keytab中的服务名称
sudo ktutil list
据我所知,AD SPN是别名,当客户端请求HTTP / apache_server.com时,它实际上获得了host / apache_server.com的kerberos服务权证。
Kerberos在unix方面对这些别名一无所知,所以你必须明确地说明keytab中的内容。
有一件事可能会帮助您获得支持使用Any关键字的最新版本的mod_auth_kerb
KrbServiceName Any
这意味着模块将search密钥表并使用它find的所有密钥,直到其中一个可用。