创建 keytab 文件

您可以使用同一个账户在所有集群节点上进行身份验证。为此,请为这些节点中的每一个创建一个包含服务主体名称 (SPN)keytab 文件。创建 keytab 文件时,必须使用一个属性来生成加密盐,它会修改哈希函数输入。

您必须使用任何方便的方法保存生成的“加密盐”,以便以后将新的 SPN 添加到 keytab 文件时加以使用。

您还可以为需要配置 Kerberos 身份验证的每个集群节点创建单独的 Active Directory 用户账户。

在您创建 keytab 文件之前

在创建 keytab 文件之前,对于每个 SPN,请确保它未在 Active Directory 中注册。您可以通过运行以下命令来执行此操作:setspn -Q <SPN>,其中 <SPN> 具有以下结构:HTTP/<集群节点的完全限定域名 (FQDN)>@<Active Directory 域的领域名称(大写)>

该命令应返回“未找到这样的 SPN”,这意味着所讨论的 SPN 未注册。如果 SPN 已注册,则在创建 keytab 文件之前,您需要从账户中取消分配 SPN 或在分配了此 SPN 的 Active Directory 中删除账户本身。

检查一个控制节点和两个辅助节点的 SPN 的示例:

setspn -Q HTTP/control-01.test.local@TEST.LOCAL

setspn -Q HTTP/secondary-01.test.local@TEST.LOCAL

setspn -Q HTTP/secondary-02.test.local@TEST.LOCAL

创建 keytab 文件

在域管理员账户下,在域控制器服务器或作为域一部分的 Windows Server 计算机上创建 keytab 文件。

要创建使用一个用户账户的 keytab 文件:

  1. Active Directory 用户和计算机管理单元中,创建一个用户账户(例如名为 control-user)。
  2. 若要使用 AES256-SHA1 加密算法,请在 Active Directory 用户和计算机管理单元中执行以下操作:
    1. 打开创建的账户的属性。
    2. 账户选项卡中,选择此账户支持 Kerberos AES 256 位加密复选框。
  3. 使用 ktpass 工具为 control-user 创建 keytab 文件。为此,请在命令行运行以下命令:

    C:\Windows\system32\ktpass.exe -princ HTTP/<控制节点的完全限定域名 (FQDN)>@<大写的领域 Active Directory 域名> -mapuser control-user@<大写的领域 Active Directory 域名> -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * +dumpsalt -out <文件路径>\<文件名>.keytab

    在运行此命令时,该工具将提示您输入 control-user 密码。

    控制节点的 SPN 将被添加到已创建的 keytab 文件。屏幕将显示生成的加密盐:加密盐为“<哈希值>”的哈希密码。

  4. 对于每个集群节点,将 SPN 条目添加到 keytab 文件中。为此,请运行以下命令:

    C:\Windows\system32\ktpass.exe -princ HTTP/<节点的完全限定域名 (FQDN)>@<大写的领域 Active Directory 域名> -mapuser control-user@<大写的领域 Active Directory 域名> -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -in <先前创建的文件的路径和名称>.keytab -out <路径和新名称>.keytab -setupn -setpass -rawsalt "<在第 3 步创建 keytab 文件时获取的加密盐哈希值>"

    在运行此命令时,该工具将提示您输入 control-user 密码。

将创建 keytab 文件。此文件将创建集群节点的所有已添加的 SPN。

示例:

例如,您需要创建一个包含以下 3 个节点的 SPN 的 keytab 文件:control-01.test.localsecondary-01.test.localsecondary-02.test.local

要在 C:\keytabs\ 文件夹中创建一个名为 filename1.keytab 且包含控制节点 SPN 的文件,请运行以下命令:

C:\Windows\system32\ktpass.exe -princ HTTP/control-01.test.local@TEST.LOCAL -mapuser control-user@TEST.LOCAL -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * +dumpsalt -out C:\keytabs\filename1.keytab

假定您已收到加密盐 "TEST.LOCALHTTPcontrol-01.test.local"

要再添加一个 SPN,请运行以下命令:

C:\Windows\system32\ktpass.exe -princ HTTP/secondary-01.test.local@TEST.LOCAL -mapuser control-user@TEST.LOCAL -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -in C:\keytabs\filename1.keytab -out C:\keytabs\filename2.keytab -setupn -setpass -rawsalt "TEST.LOCALHTTPcontrol-01.test.local"

要添加第三个 SPN,请运行以下命令:

C:\Windows\system32\ktpass.exe -princ HTTP/secondary-02.test.local@TEST.LOCAL -mapuser control-user@TEST.LOCAL -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -in C:\keytabs\filename2.keytab -out C:\keytabs\filename3.keytab -setupn -setpass -rawsalt "TEST.LOCALHTTPcontrol-01.test.local"

这将创建一个名为 filename3.keytab 的文件,其中包含全部三个已添加的 SPN。

要为每个节点创建使用单独用户账户的 keytab 文件:

  1. Active Directory 用户和计算机管理单元中,为每个集群节点创建一个单独的用户账户(例如,可以创建 control-usersecondary1-usersecondary2-user 等用户账户)。
  2. 若要使用 AES256-SHA1 加密算法,请在 Active Directory 用户和计算机管理单元中执行以下操作:
    1. 打开创建的账户的属性。
    2. 账户选项卡中,选择此账户支持 Kerberos AES 256 位加密复选框。
  3. 使用 ktpass 工具为 control-user 创建 keytab 文件。为此,请在命令行运行以下命令:

    C:\Windows\system32\ktpass.exe -princ HTTP/<控制节点的完全限定域名 (FQDN)>@<大写的领域 Active Directory 域名> -mapuser control-user@<大写的领域 Active Directory 域名> -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -out <文件路径>\<文件名>.keytab

    在运行此命令时,该工具将提示您输入 control-user 密码。

    控制节点的 SPN 将被添加到已创建的 keytab 文件。

  4. 对于每个集群节点,将 SPN 条目添加到 keytab 文件中。为此,请运行以下命令:

    C:\Windows\system32\ktpass.exe -princ HTTP/<节点的完全限定域名 (FQDN)>@<大写的领域 Active Directory 域名> -mapuser secondary1-user@<大写的领域 Active Directory 域名> -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -in <先前创建的文件的路径和名称>.keytab -out <路径和新名称>.keytab

    在运行此命令时,该工具将提示您输入 secondary1-user 密码。

将创建 keytab 文件。此文件将创建集群节点的所有已添加的 SPN。

示例:

例如,您需要创建一个包含以下 3 个节点的 SPN 的 keytab 文件:control-01.test.localsecondary-01.test.localsecondary-02.test.local

要在 C:\keytabs\ 文件夹中创建一个名为 filename1.keytab 且包含控制节点 SPN 的文件,请运行以下命令:

C:\Windows\system32\ktpass.exe -princ HTTP/control-01.test.local@TEST.LOCAL -mapuser control-user@TEST.LOCAL -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -out C:\keytabs\filename1.keytab

要再添加一个 SPN,请运行以下命令:

C:\Windows\system32\ktpass.exe -princ HTTP/secondary-01.test.local@TEST.LOCAL -mapuser secondary1-user@TEST.LOCAL -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -in C:\keytabs\filename1.keytab -out C:\keytabs\filename2.keytab

要添加第三个 SPN,请运行以下命令:

C:\Windows\system32\ktpass.exe -princ HTTP/secondary-02.test.local@TEST.LOCAL -mapuser secondary2-user@TEST.LOCAL -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -in C:\keytabs\filename2.keytab -out C:\keytabs\filename3.keytab

这将创建一个名为 filename3.keytab 的文件,其中包含全部三个已添加的 SPN。

在您创建 keytab 文件之后

在创建 keytab 文件之后,对于每个 SPN,确保它已注册并分配给相关账户。您可以通过运行以下命令来执行此操作:setspn -Q <SPN>,其中 <SPN> 具有以下结构:HTTP/<集群节点的完全限定域名 (FQDN)>@<Active Directory 域的领域名称(大写)>

该命令必须返回“找到现有的 SPN”以及分配了 SPN 的账户。

此外,创建 keytab 文件后,您可以检查分配给相关账户的 SPN 列表。为此,您可以运行以下命令:setspn -L <账户>,其中<账户>具有以下结构:<用户名>@<Active Directory 域的领域名称(大写)>

如果使用一个账户创建了 keytab 文件,则该命令应返回为其创建 keytab 文件的所有 SPN 的列表。如果为每个节点创建了单独账户的 keytab 文件,则该命令应返回一个分配给特定账户的 SPN。

针对一个账户的示例命令:

setspn -L control-user@TEST.LOCAL

每个节点单独账户的示例命令:

setspn -L control-user@TEST.LOCAL

setspn -L secondary1-user@TEST.LOCAL

setspn -L secondary2-user@TEST.LOCAL

页面顶部