kinit:获取初始凭据时整数值无效

问题描述 投票:0回答:1

我正在尝试配置一个密钥表文件,以便与我的服务主体一起使用,以在 Linux (RHEL9) 服务器和 Microsoft Windows 2022 Server 之间进行 Kerberos 身份验证。服务主体是 MSSQLSvc/[电子邮件受保护]。当我在我的 AD 主机(控制器)上生成 keytab 文件,然后将其上传到我的 RHEL 主机并尝试生成票证时。

kinit -V -t /etc/test.keytab MSSQLSvc/[email protected]

我总是得到:

Using keytab: /etc/test.keytab
kinit: Invalid integer value while getting initial credentials

还尝试过:

kinit MSSQLSvc/[email protected]
kinit: Invalid integer value while getting initial credentials

这是我如何配置环境的背景。首先,我将 SQL Server 服务设置为使用我的域用户 [email protected] 运行。然后我为我的用户生成了一个服务原则:

PS C:\Users\Administrator> setSPN EvolvenDBUser
Registered ServicePrincipalNames for CN=EvolvenDBUser,CN=Users,DC=evolven,DC=corp:
        MSSQLSvc/MSSQL-G1CFTVE.evolven.corp
        MSSQLSvc/MSSQL-G1CFTVE.evolven.corp:1433

接下来,我通过以下命令在 AD 主机上生成了一个密钥表文件:

ktpass -princ MSSQLSvc/[email protected] -mapuser [email protected] -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass <password> -out test.keytab -SetPass

它返回这个:

Targeting domain controller: EC2AMAZ-AEHRC46.evolven.corp
Using legacy password setting method
Successfully mapped MSSQLSvc/MSSQL-G1CFTVE.evolven.corp to EvolvenDBUser.
Key created.
Output keytab to evolven.keytab:
Keytab version: 0x502
keysize 99 MSSQLSvc/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 20 etype 0x12 (AES256-SHA1) keylength 32 (0x0a32866cd2364109a006b483cedd8f6eee418f87b2b460d6be75e6763b1b0aef)

当我检查 RHEL 主机上的密钥表文件时:

klist -k /etc/test.keytab 
Keytab name: FILE:/etc/test.keytab
KVNO Principal
---- --------------------------------------------------------------------------
  18 MSSQLSvc/[email protected]

在我的 RHEL 主机上,我的 krb5.conf 不是很花哨,但我可以确认它支持我想要使用的加密设置。

[logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log

[libdefaults]
    default_realm = EVOLVEN.CORP
    dns_lookup_realm = false
    dns_lookup_kdc = false
    ticket_lifetime = 30d
    renew_lifetime = 30d
    forwardable = true
    udp_preference_limit = 1  # Forces TCP if UDP fails
    default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
    default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
    permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96

[realms]
    EVOLVEN.CORP = {
        kdc = EC2AMAZ-AEHRC46.evolven.corp
        admin_server = EC2AMAZ-AEHRC46.evolven.corp
    }

[domain_realm]
    .evolven.corp = EVOLVEN.CORP
    evolven.corp = EVOLVEN.CORP

我尝试了很多事情:

  1. 我已在 AD 中启用用户支持 AES-128 和 AES-256。
  2. 更改AD用户的密码,然后重新生成keytab文件。我还删除了密码中的特殊字符,认为这可能会导致问题。还是一样。
  3. 是否执行了 kdestroy 来删除所有旧票。
  4. 我在这里看到了一篇文章:kinit:获取初始凭据时预身份验证失败
  5. 不知道为什么,但即使我启用了日志记录,我也看不到任何日志。

我尝试这样做:

ktutil:  add_entry -password -p MSSQLSvc/[email protected] -k 18 -e aes256-cts-hmac-sha1-96 -f

我回来了

add_entry: Invalid integer value while adding new entry

所以我的服务原则认证显然有问题。我该如何解决才能生成票证?

active-directory kerberos
1个回答
0
投票

Invalid integer
是krb5.conf解析期间发生的错误。这很可能是因为您的 udp_preference_limit 设置为
1  # Forces TCP if UDP fails
– 这不是一个有效的数字。

除此之外:您有两个实体(客户端和服务),但两者之间只有一个 AD 帐户,这不是您应该使用 Kerberos 的方式。

作为一般规则,服务的客户端永远不应该使用与该服务相同的主体 - 您应该为每个客户端创建一个专用的用户帐户(没有 SPN)。

(当您这样做时

kinit MSSQLSvc/MSSQL-whatever
,您不会获得MSSQL服务器的票证——您会获得作为MSSQL服务器的票证,这与您可能想要做的相反。)

请记住,密钥表是“字面上”不同形式的帐户密码,因此,如果您通常不会告诉客户服务帐户的密码,那么您也不应该向客户提供服务密钥表。 (就像您也不会给 webapp 用户提供服务器的 HTTPS 私钥的副本一样......)

© www.soinside.com 2019 - 2024. All rights reserved.