ktpass

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012

在 Active Directory 域服务 (AD DS) 中为主机或服务配置服务器主体名称,并生成一个包含服务的共享机密密钥的 .keytab 文件。 .Keytab 文件基于麻省理工学院 (MIT) 对 Kerberos 身份验证协议的实现。 ktpass 命令行工具允许支持 Kerberos 身份验证的非 Windows 服务使用 Kerberos 密钥发行中心 (KDC) 服务提供的互操作性功能。

语法

ktpass
[/out <filename>]
[/princ <principalname>]
[/mapuser <useraccount>]
[/mapop {add|set}] [{-|+}desonly] [/in <filename>]
[/pass {password|*|{-|+}rndpass}]
[/minpass]
[/maxpass]
[/crypto {DES-CBC-CRC|DES-CBC-MD5|RC4-HMAC-NT|AES256-SHA1|AES128-SHA1|All}]
[/itercount]
[/ptype {KRB5_NT_PRINCIPAL|KRB5_NT_SRV_INST|KRB5_NT_SRV_HST}]
[/kvno <keyversionnum>]
[/answer {-|+}]
[/target]
[/rawsalt] [{-|+}dumpsalt] [{-|+}setupn] [{-|+}setpass <password>]  [/?|/h|/help]

参数

参数 说明
/out <filename> 指定要生成的 Kerberos 版本 5 .keytab 文件的名称。 注意:这是传输到未运行 Windows 操作系统的计算机的 .keytab 文件,你随后用现有的 .keytab 文件 /Etc/Krb5.keytab 替换或合并它。
/princ <principalname> 以主机/computer.contoso.com@CONTOSO.COM 格式指定主体名称。 警告:此参数区分大小写。
/mapuser <useraccount> 将 Kerberos 主体的名称(由 princ 参数指定)映射到指定的域帐户。
/mapop {add|set} 指定映射属性的设置方式。
  • Add - 添加指定的本地用户名的值。 这是默认值。
  • Set - 为指定的本地用户名设置仅数据加密标准 (DES) 加密的值。
{-|+}desonly 默认设置仅 DES 加密。
  • + 设置仅 DES 加密的帐户。
  • - 解除对仅 DES 加密的帐户的限制。 重要说明:默认情况下,Windows 不支持 DES。
/in <filename> 指定要从未运行 Windows 操作系统的主机读取的 .keytab 文件。
/pass {password|*|{-|+}rndpass} 指定由 princ 参数指定的主体用户名的密码。 使用 * 来提示用户输入密码。
/minpass 将随机密码的最小长度设置为 15 个字符。
/maxpass 将随机密码的最大长度设置为 256 个字符。
/crypto {DES-CBC-CRC|DES-CBC-MD5|RC4-HMAC-NT|AES256-SHA1|AES128-SHA1|All} 指定在 keytab 文件中生成的密钥:
  • DES-CBC-CRC - 用于兼容性。
  • DES-CBC-MD5 - 更严格地遵循 MIT 实现,用于兼容性。
  • RC4-HMAC-NT - 采用 128 位加密。
  • AES256-SHA1 - 采用 AES256-CTS-HMAC-SHA1-96 加密。
  • AES128-SHA1 - 采用 AES128-CTS-HMAC-SHA1-96 加密。
  • All - 声明所有受支持的加密类型都可以使用。

注意:由于默认设置基于较旧的 MIT 版本,因此应始终使用 /crypto 参数。

/itercount 指定用于 AES 加密的迭代计数。 对于非 AES 加密,默认值会忽略 itercount,并将 AES 加密设置为 4,096。
/ptype {KRB5_NT_PRINCIPAL|KRB5_NT_SRV_INST|KRB5_NT_SRV_HST} 指定主体类型。
  • KRB5_NT_PRINCIPAL - 常规主体类型(推荐)。
  • KRB5_NT_SRV_INST - 用户服务实例
  • KRB5_NT_SRV_HST - 主机服务实例
/kvno <keyversionnum> 指定密钥版本号。 默认值为 1。
/answer {-|+} 设置后台应答模式:
  • - 使用“否”自动回答重置密码提示。
  • + 使用“是”自动回答重置密码提示。
/target 设置要使用的域控制器。 默认根据主体名称检测域控制器。 如果域控制器名称未解析,则会显示一个对话框,提示输入有效的域控制器。
/rawsalt 强制 ktpass 在生成密钥时使用 rawsalt 算法。 此参数是可选的。
{-|+}dumpsalt 此参数的输出显示用于生成密钥的 MIT salt 算法。
{-|+}setupn 除了设置服务主体名称 (SPN) 之外,还设置用户主体名称 (UPN)。 默认在 .keytab 文件中同时设置这两者。
{-|+}setpass <password> 在提供时设置用户的密码。 如果使用 rndpass,则改为生成随机密码。
/? 显示此命令的帮助。

注解

  • 在未运行 Windows 操作系统的系统上运行的服务可以使用 AD DS 中的服务实例帐户进行配置。 这样,任何 Kerberos 客户端就都可以使用 Windows KDC 向未运行 Windows 操作系统的服务进行身份验证。

  • /princ 参数不由 ktpass 计算,而是按提供的方式使用。 生成 Keytab 文件时,不会检查参数是否与 userPrincipalName 属性值的大小写完全匹配。 如果没有精确的大小写匹配,使用此 Keytab 文件的区分大小写的 Kerberos 分发可能会出现问题,甚至可能在预身份验证期间失败。 从 LDifDE 导出文件检查和检索正确的 userPrincipalName 属性值。 例如:

    ldifde /f keytab_user.ldf /d CN=Keytab User,OU=UserAccounts,DC=contoso,DC=corp,DC=microsoft,DC=com /p base /l samaccountname,userprincipalname
    

示例

若要为未运行 Windows 操作系统的主机创建 Kerberos .keytab 文件,必须将主体映射到帐户并设置主机主体密码。

  1. 使用 Active Directory“用户和计算机”管理单元为未运行 Windows 操作系统的计算机上的服务创建用户帐户。 例如,创建名为 User1 的帐户。

  2. 键入以下内容,使用 ktpass 命令为用户帐户设置标识映射:

    ktpass /princ host/User1.contoso.com@CONTOSO.COM /mapuser User1 /pass MyPas$w0rd /out machine.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set
    

    注意

    不能将多个服务实例映射到同一用户帐户。

  3. 在未运行 Windows 操作系统的主机上将 .keytab 文件与 /Etc/Krb5.keytab 文件合并。