我正在 Ubuntu 14.10 上安装 Squid3,并且我想使用 kerberos 5 将其集成到 Windows Server 2012 上。我的基础架构如下:
默认网关:
192.168.1.1
DNS 和域控制器(Windows Server 2012):
dc.mydomain.com
address 192.168.1.250
netmask 255.255.255.0
gateway 192.168.1.1
代理(Ubuntu 桌面 14.10) vmproxy
address 192.168.1.251
netmask 255.255.255.0
gateway 192.168.1.1
dns-search mydomain.com
dns-nameservers 192.168.1.2
步骤如下
步骤 1:检查 DNS 查找:正向查找和反向查找均正常工作。
第 2 步:在代理服务器上配置正确的时区:
$ sudo service ntp stop
$ sudo ntpdate -b dc.mydomain.com
$ sudo service ntp start
步骤 3:安装 Kerberos 客户端库并将 Kerberos 领域名称设置为 MYDOMAIN.COM
$ sudo apt-get install krb5-user
步骤4:编辑Kerberos配置文件/etc/krb5.conf。
[libdefaults]
default_realm = MYDOMAIN.COM
default_tgs_enctypes = rc4-hmac des3-hmac-sha1
default_tkt_enctypes = rc4-hmac des3-hmac-sha1
检查 Kerberos 配置是否正确。通过
$ kinit [email protected]
$ klist
步骤:5 在 Active Directory 中创建一个专门的用户并将该用户映射到 Kerberos 主体名称
c:/> ktpass -princ HTTP/[email protected] -mapuser [email protected] -crypto rc4-hmac-nt -pass P@ssw0rd -ptype KRB5_NT_PRINCIPAL -out krb5.keytab
步骤:6 将 keytab 文件复制到 vmproxy 上的 /etc/krb5.keytab
我的 /etc/krb5.conf 如下:-
[libdefaults]
default_realm= MYDOMAIN.COM
default_tgs_enctypes=rc4.hmac des3-hmac.sha1
default_tkt_enctypes=rc4.hmac des3-hmac.sha1
[realms]
MYDOMAIN.COM={
kdc=dc.mydomain.com
admin_server=dc.mydomain.com
default_domain=mydomain.com
}
[domain_realm]
.mydomain.com= MYDOMAIN.COM
mydomain.com=MYDOMAIN.COM
现在当我从 dc.mydomain.com 测试 TGT 时:
$ kinit -V -k -t /etc/krb5.keytab HTTP/[email protected]
它说:
Using default cache: /tmp/krb5cc_0
Using principal: HTTP/[email protected]
Using Keytab: /etc/krb5.keytab
kinit:Client 'HTTP/[email protected]' not found in kerberos database while getting initial credentials
使用时
$ kinit -k
它说
kinit:Cannot determine realm for host (principal host/vmproxy@)
答案1
此命令:
c:/> ktpass -princ HTTP/[email protected] -mapuser [email protected] -crypto rc4-hmac-nt -pass P@ssw0rd -ptype KRB5_NT_PRINCIPAL -out krb5.keytab
我相信设置了 HTTP/[电子邮件保护]成为与[电子邮件保护]AD 中的用户。Active Directory 通常不允许您以服务主体的身份进行身份验证(具体来说,不允许它通过 AS_REQ 获取 TGT);理论上,服务主体应该用于接受用户凭据,而不是用于对您的 Kerberos 领域进行身份验证。
这与 Unix KDC 不同,Unix KDC 通常默认不区分“服务主体”和“用户主体”,允许通过 进行身份验证kinit
。在 Active Directory 中,当您尝试以主体身份进行身份验证时,KDC 会假装主体不存在kinit
,这往往会造成混淆。
如果您可以成功以任何其他用户的身份进行身份验证,我会尝试通过运行以下命令来测试服务主体是否正常运行:
$ kinit some_other_user
$ kvno HTTP/[email protected]
它仅获取 HTTP/ 的服务票证[电子邮件保护]。或者,您可以验证为[电子邮件保护]而不是您设置的服务主体。
如果你需要能够kinit
作为 HTTP/[电子邮件保护]直接,我认为这是可能的,但您需要更改相关 AD 帐户上的 userPrincipalName 属性。我现在不记得如何实现这一点,但如果我没记错的话,您只能有一个这样的 UPN;您不能为同kinit
一个帐户拥有多个不同的主体名称。