排查 Active Directory 的 Kerberos 加密类型问题

本页面介绍了如何识别客户端在使用 Active Directory Kerberos 通过 SMB 或 NFS 访问 NetApp Volumes 时使用的 Kerberos 加密类型 (enctype)。

SMB 和 NFS 不协商 enctype。密钥分发中心 (KDC) 会在发出 Kerberos 票据时选择 enctype。

  • SMB 通常使用服务正文名称 (SPN) cifs/<server_fqdn>

  • 使用 Kerberos 的 NFS 通常使用 SPN nfs/<server_fqdn>

只有当客户端、KDC 和 NetApp Volumes 计算机账号共享至少一个受支持的 enctype 时,身份验证才会成功。如需详细了解 NetApp Volumes 如何通告 enctype 以及网域加入何时发生,请参阅 Active Directory 政策如何加入网域

准备工作

在开始之前,请完成以下前提条件。

  1. 确认存储池已附加 Active Directory 政策,并且网域加入已成功完成。如需了解详情,请参阅测试 Active Directory 政策连接

  2. 确认客户端、网域控制器和 NetApp Volumes 可以通过网络相互连接。如需了解详情,请参阅测试与 Google Cloud NetApp Volumes 的连接

  3. 在 Active Directory 中查找 NetApp Volumes 计算机账号名称:

    • Standard、Premium 和 Extreme 池可以有多个账号。

    • Flex Unified 和 Flex File 池每个池使用一个账号。

如需了解按服务等级划分的账号行为,请参阅 Active Directory 政策如何加入网域

在 NetApp Volumes 计算机账号上查找 enctype

文件服务器的 Kerberos enctype 存储在 Active Directory 中的服务器计算机账号的 msDS-SupportedEncryptionTypes 属性中。此属性表示 NetApp Volumes 计算机账号向 KDC 通告的 enctype。

查询计算机账号

如需在已加入网域且安装了 Active Directory 模块的机器上进行查询,请执行以下操作:

 Get-ADComputer -Identity "COMPUTER_ACCOUNT_NAME" -Properties msDS-SupportedEncryptionTypes |
  Select-Object Name, msDS-SupportedEncryptionTypes

COMPUTER_ACCOUNT_NAME 替换为 NetApp Volumes 计算机账号名称。

如需使用 LDAP 进行查询,请执行以下操作:

 ([adsisearcher]"(&(objectClass=computer)(name=COMPUTER_ACCOUNT_NAME))").FindOne().
  Properties["msdssupportedencryptiontypes"]

解码位掩码

msDS-SupportedEncryptionTypes 是在 MS-KILE 中定义的位掩码。以下是常见值:

  • 0x1:DES-CBC-CRC

  • 0x2:DES-CBC-MD5

  • 0x4:RC4-HMAC

  • 0x8:AES128-CTS-HMAC-SHA1-96

  • 0x10:AES256-CTS-HMAC-SHA1-96

如果该属性为空或 0,则 KDC 会为该账号应用自己的默认值。如需了解详情,请参阅 enctype 选择的运作方式

enctype 选择的运作方式

enctype 选择是三个因素的交集。KDC 会选择最强的常见 enctype。

  1. 客户端:在 Kerberos AS-REQTGS-REQ 中通告受支持的 enctype。

  2. KDC:应用网域控制器配置和操作系统 默认值。

  3. 目标账号:通过 NetApp Volumes 计算机账号上的 msDS-SupportedEncryptionTypes 属性限制 KDC 可用于该服务 票据的 enctype。

KDC 执行以下操作:

  1. 计算客户端、KDC 和目标账号 enctype 的交集。

  2. 在该集合中选择最强的 enctype。

  3. 发出使用该 enctype 加密的票据,以及可以使用其他(通常更强的)enctype 的会话密钥。

msDS-SupportedEncryptionTypes 为空或零时

对于没有配置值的账号,KDC 会在网域控制器上使用 DefaultDomainSupportedEncTypes。您的网域管理员控制该设置。如需了解详情,请参阅 有关 Kerberos 加密类型选择的 Microsoft 文档

票据加密与会话密钥加密

您可以区分每个票据的两个 enctype:

  • 票据加密:在 klist 输出中显示为 KerbTicket Encryption Type

  • 会话密钥加密:在 klist 输出中显示为 Session Key Type

根据配置和 AES-SK 位 (0x400),票据可以采用 RC4 加密,而会话密钥可以采用 AES 加密。

如果客户端、KDC 和 NetApp Volumes 计算机账号未共享至少一个 enctype,则身份验证会失败。典型指标包括 KDC 事件 16 或 27 以及客户端 Security-Kerberos 事件 4。

限制 NetApp Volumes 通告的 enctype

NetApp Volumes 通过 Active Directory 政策控制其在 Active Directory 计算机账号上通告的 enctype。

默认情况下,NetApp Volumes 通告 DES 和 RC4-HMAC。当您在 Active Directory 政策中选择 Enable AES Encryption for Active Directory authentication 时,NetApp Volumes 还会通告 AES-128 和 AES-256。如需详细了解字段说明,请参阅 创建 Active Directory 政策

如需确认池在加入网域后通告的内容,请在 NetApp Volumes 计算机账号上查询 msDS-SupportedEncryptionTypes。如需了解详情,请参阅在 NetApp Volumes 计算机账号上查找 enctype

在客户端上查找 enctype

如需查看客户端使用的 Kerberos 加密类型,请针对您的客户端操作系统运行相应命令。

Windows 客户端

如需在身份验证后查看 Kerberos 加密类型,请执行以下操作:

 klist

对于 SMB 会话,请查找 Server 值为 cifs/<server_fqdn> 的票据。 对于使用 Kerberos 的 NFS,请查找 nfs/<server_fqdn>

以下字段显示了加密类型:

  • KerbTicket Encryption Type:票据 enctype

  • Session Key Type:会话密钥 enctype

如需查看特定登录会话,请执行以下操作:

 klist tickets -li 0x3e7

Linux 或 macOS 客户端

如需显示缓存的票据及其加密类型,请执行以下操作:

 klist -e

如需查看 keytab 内容,请执行以下操作:

 klist -kte /path/to/keytab

在网域控制器事件中查找 enctype

如果在网域控制器上启用了 Kerberos 审核,则事件 4769(已请求 Kerberos 服务票据)会记录用于服务票据的 enctype。按服务名称 cifs/... 过滤 SMB,或按服务名称 nfs/... 过滤 NFS。

事件 4769 中的相关字段包括以下内容:

  • Ticket Encryption Type0x12 是 AES256,0x11 是 AES128,0x17 是 RC4-HMAC

  • SessionKeyEncryptionType:会话密钥的加密类型

  • ServiceSupportedEncryptionTypes:服务账号通告的加密类型

  • ClientAdvertizedEncryptionTypes:客户端发送的加密类型

  • Service Name:服务名称,例如 cifs/...nfs/...

  • Client Address:客户端地址

事件 4768(Kerberos 身份验证服务)记录了票据授予票据的 enctype 使用情况。

以下 XML 过滤器是安全日志中 RC4 服务票据的示例:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[EventData[Data[@Name='TicketEncryptionType'] and (Data='0x17')]]
    </Select>
  </Query>
</QueryList>

如需总结网域控制器事件日志中 enctype 的使用情况,您的 网域管理员可以使用 Get-KerbEncryptionUsage.ps1

您的 Active Directory 管理员会在客户端和网域控制器上配置 enctype 限制。NetApp Volumes 文档不涵盖这些设置。 如需了解详情,请参阅以下资源:

后续步骤