当前位置: 首页 > 知识库问答 >
问题:

Kerberosaes-256加密不工作

凌运恒
2023-03-14

服务器是RHEL7,Kerberos是AD(Windows)。我是KDC的唯一客户。

Arcfour hmac工作正常,但当我将加密类型更改为aes-256并设置新的密钥表时,kinit仍然可以工作,但kvno不能。即使用户似乎拥有有效的票据(在klist中),他也无法再启动服务。

我无法访问KerberosAD,但它似乎正确配置为使用aes-256,因为最终用户(在Windows计算机上)已经以这种加密类型请求票证。

我的krb5.conf:

[libdefaults]
default_realm = TOTO.NET
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
default_tkt_enctypes = aes256-cts aes128-cts des-cbc-md5 des-cbc-crc
default_tgs_enctypes = aes256-cts aes128-cts des-cbc-md5 des-cbc-crc
permitted_enctypes = aes256-cts aes128-cts des-cbc-md5 des-cbc-crc

[realms]
TOTO.NET = {
  kdc = kdc1.toto.net
  kdc = kdc2.toto.net
  admin_server = kdc1.toto.net
}

[domain_realm]
.toto.net = TOTO.NET
toto.net = TOTO.NET

下面是我在尝试使用kvno获取票据时遇到的错误:

[2477332] 1493147723.961912: Getting credentials myuser@TOTO.NET -> nn/myserver@TOTO.NET using ccache FILE:/tmp/krb5cc_0 
[2477332] 1493147723.962055: Retrieving myuser@TOTO.NET -> nn/myserver@TOTO.NET from FILE:/tmp/krb5cc_0 with result: -1765328243/Matching credential not found (filename: /tmp/krb5cc_0) 
[2477332] 1493147723.962257: Retrieving myuser@TOTO.NET -> krbtgt/TOTO.NET@TOTO.NET from FILE:/tmp/krb5cc_0 with result: 0/Success 
[2477332] 1493147723.962267: Starting with TGT for client realm: myuser@TOTO.NET -> krbtgt/TOTO.NET@TOTO.NET 
[2477332] 1493147723.962274: Requesting tickets for nn/myserver@TOTO.NET, referrals on 
[2477332] 1493147723.962309: Generated subkey for TGS request: aes256-cts/17DF 
[2477332] 1493147723.962363: etypes requested in TGS request: aes256-cts, aes128-cts 
[2477332] 1493147723.962504: Encoding request body and padata into FAST request 
[2477332] 1493147723.962575: Sending request (1716 bytes) to TOTO.NET 
[2477332] 1493147723.962725: Resolving hostname kdc1.TOTO.NET 
[2477332] 1493147723.963054: Initiating TCP connection to stream ip_of_kdc1:88 
[2477332] 1493147723.964205: Sending TCP request to stream ip_of_kdc1:88 
[2477332] 1493147724.3751: Received answer (329 bytes) from stream ip_of_kdc1:88 
[2477332] 1493147724.3765: Terminating TCP connection to stream ip_of_kdc1:88 
[2477332] 1493147724.3846: Response was not from master KDC 
[2477332] 1493147724.3879: Decoding FAST response 
[2477332] 1493147724.3965: TGS request result: -1765328370/KDC has no support for encryption type

klist-ket mykeytab

Keytab name: FILE:nn.service.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   1 01/01/1970 01:00:00 nn/myserver01@TOTO.NET (aes256-cts-hmac-sha1-96)
   1 03/22/2017 16:34:55 nn/myserver02@TOTO.NET (aes256-cts-hmac-sha1-96)

多谢你的帮忙

共有2个答案

微生毅
2023-03-14

我最近刚刚遇到这个问题,并且能够解决它。

对于我们来说,AD使用的是与Kerberoshtml" target="_blank">客户端默认使用的不同的salt。

也就是说,当使用ktutil:addent-password-p时servicepuppetnp@AMER.EXAMPLE.COM-k 4-e arcfour hmac密码admspike_white@AMER.EXAMPLE.COM:

生成一个keytab文件,我可以使用它将其作为主体。鉴于:

ktutil:加法器-密码-padmspike_white@AMER.EXAMPLE.COM-k 1-e aes256-cts-hmac-sha1-96密码admspike_white@AMER.EXAMPLE.COM:

没有生成允许成功kinit的keytab文件。(pre-auth失败)。

我必须这么做:

ktutil: addent-Password-padmspike_white@AMER.EXAMPLE.COM-k 1-e eses256-cts-hmac-sha1-96-fadmspike_white@AMER.EXAMPLE.COM的密码:

这告诉ktutil从AD DC获取salt信息。然后它使用正确的盐。这将生成一个允许成功kinit的键表文件。

颛孙炜
2023-03-14

请让您的广告管理员在与密钥表关联的广告帐户上启用对AES-256加密类型的支持。要查找该帐户,请运行以下命令:

setspn -Q nn/myserver01@TOTO.NET

输出将告诉您帐户的名称。它将以CN=xxx开始,其中“xxx”是广告帐户的名称。要在AD帐户上启用对AES-256加密类型的支持,请告诉您的AD管理员,必须选中复选框“此帐户支持Kerberos AES 256位加密”,该复选框位于底部的“帐户”选项卡下。

 类似资料:
  • 我使用Botan库进行加密,我的加密代码如下所示。 这段代码看起来很好,可以加密输入文件。我发布这段代码是为了确定加密是否有错误。(但我假设加密做得正确)

  • 我在这个网站上用AES-256加密一个虚拟字符串: https://www.devglan.com/online-tools/aes-encryption-decryption 具有以下参数: null 当我尝试用OpenSSL从命令行解密它时: 我得到这个错误:

  • 我做了一个简单的文件加密/解密器。它将模式和要操作的文件作为参数。加密时,它生成随机字符串并使用该字符串加密文件。解密文件时,它会提示用户输入密码,并在解密时使用该密码。 我的问题是,解密时得到的不是明文,而是胡言乱语,尽管我小心翼翼地将相同的密钥写入输入。 非常感谢James K Polk提供的加密/解密代码!

  • 问题内容: 我有下面的Java代码来加密使用64个字符的密钥的字符串。我的问题是这将是AES-256加密吗? 以下是结合了divanov和laz建议的代码。 问题答案: 是的,它将是64个字符,即32个字节和256位,并且256位的任何序列都可以用作AES-256密钥。 我建议您使用DatatypeConverter.parseHexBinary(或您选择的库中的类似实用程序)将十六进制字符串转换

  • 客户端: 服务器端:

  • 我试图根据PHP中给出的一个示例代码创建一个加密字符串,我的主要问题是节点。js模块不接受长度超过32字节的密钥,但PHP接受,这似乎就是我收到