获取初始值时未在 Kerberos 数据库中找到客户端

获取初始值时未在 Kerberos 数据库中找到客户端

我正在 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一个帐户拥有多个不同的主体名称。

相关内容