当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 为 Active Directory 中的 Kerberos 身份验证创建 Keytab 文件

作者:精品下载站 日期:2024-12-14 22:58:50 浏览:16 分类:玩电脑

为 Active Directory 中的 Kerberos 身份验证创建 Keytab 文件


许多 Linux 服务(apache、nginx 等)可以使用 keytab 文件在 Active Directory 中进行 Kerberos 身份验证,而无需输入密码。 keytab 文件保留 Kerberos 主体的名称和相应的加密密钥(从 Kerberos 密码获取)。在本文中,我们将展示如何使用 ktpass 工具为链接的 Active Directory 帐户的 SPN 创建密钥表文件。

最常见的是,为需要使用密钥表文件的服务创建单独的 Active Directory 用户帐户。但是,您也可以使用计算机对象来完成此操作。然后,服务名称将绑定到帐户(ServicePrincipalName - SPN)。 Kerberos 身份验证使用 SPN 将服务实例映射到 AD 帐户(这就是应用程序即使不知道用户名也可以作为服务进行身份验证的原因)。

首先,在 AD 中创建一个服务帐户并为其设置一个已知密码。您可以从图形 ADUC 控制台 (dsa.msc) 或使用 PowerShell 中的 New-ADUser cmdlet(来自 PowerShell Active Directory 模块)创建帐户:

New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "[email protected]" -Path "OU=Services,OU=Munich,OU=DE,DC=test,DC=com" -AccountPassword (ConvertTo-SecureString “Sup6r!Pa$s” -AsPlainText -force) -Enabled $true

在图形控制台或 PowerShell 中为服务帐户启用“用户无法更改密码”和“密码永不过期”选项:

Get-ADUser web|Set-ADUser -PasswordNeverExpires:$True -CannotChangePassword:$true

[玩转系统] 为 Active Directory 中的 Kerberos 身份验证创建 Keytab 文件

在下一步中,将服务主体名称 (SPN) 绑定到用户帐户。您不需要单独执行此步骤,因为 ktpass 在创建 keytab 文件时会自动执行此步骤(我将这样做是为了让您更好地理解该过程)。

将以下 SPN 记录绑定到 web 帐户:

setspn -A HTTP/[email protected] web

显示与 AD 用户关联的 SPN 记录列表:

setspn -L web

[玩转系统] 为 Active Directory 中的 Kerberos 身份验证创建 Keytab 文件

要创建密钥表文件,请使用以下命令:

ktpass -princ HTTP/[email protected] -mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass Sup6r!Pa$s -target mundc01.test.com -out c:\share\web.keytab

[玩转系统] 为 Active Directory 中的 Kerberos 身份验证创建 Keytab 文件

Successfully mapped HTTP/www.test.com to web.
Password successfully set!
Key created.
Output keytab to c:\share\webt.keytab:
Keytab version: 0x502
keysize 53 HTTP/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x73f868856e046449)

该命令已为 HTTP/[email protected] 服务的 SPN 记录创建 keytab 文件 (c:\share\webt.keytab)。 SPN记录与指定密码的Web帐户绑定。

确保服务的 SPN 记录已成功创建(如果您没有手动创建):

setspn -Q */[email protected]

您可以看到已找到 SPN 记录(找到现有 SPN!)。它与网络帐户绑定。

[玩转系统] 为 Active Directory 中的 Kerberos 身份验证创建 Keytab 文件

Windows 没有内置工具来查看 keytab 文件的内容。但如果您的计算机上安装了 Java JRE,则可以使用 Java 分发包中包含的 klist.exe

cd "c:\Program Files\Java\jre1.8.0_181\bin"
klist.exe -K -e -t -k c:\PS\web_host.keytab
Key tab: c:\PS\web_host.keytab, 5 entries found.

[玩转系统] 为 Active Directory 中的 Kerberos 身份验证创建 Keytab 文件

让我们查看 keytab 文件的内容。此处指定 SPN、密钥、时间戳、加密算法和密钥版本(KVNO — 密钥版本号)。

创建密钥表文件时,ktpass 会递增用户帐户的 msDS-KeyVersionNumber 属性值(您可以在 AD 属性编辑器中看到它),并将该值用作密钥表表中的 KVNO。

[玩转系统] 为 Active Directory 中的 Kerberos 身份验证创建 Keytab 文件

如果更改帐户密码,属性值将增加 1,并且具有先前 KVNO 的所有 keytab 条目将变得无效(即使新密码与旧密码完全匹配)。如果 AD 中的用户密码发生更改,则必须重新生成 keytab 文件。

keytab 文件可以保存不同 SPN 的密钥。使用 ktpass 参数将其他 SPN 和密钥添加到密钥表文件中(

-in

,-

setupn

,

-setpass

)。

您获得的密钥表文件的进一步使用取决于它所应用的服务。例如,在这里您可以了解如何在 Zabbix 中使用 keytab 文件进行透明的 SSO 用户身份验证。另外,不要忘记确保密钥表文件的安全(任何能够读取密钥表文件内容的人都可以使用其中的任何密钥)。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯