![Apache Kerberos 身份验证:KDC 不支持加密类型](https://linux22.com/image/702119/Apache%20Kerberos%20%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%EF%BC%9AKDC%20%E4%B8%8D%E6%94%AF%E6%8C%81%E5%8A%A0%E5%AF%86%E7%B1%BB%E5%9E%8B.png)
我针对此问题发布了一个新帖子,因为我在这里找到的所有解决方案对我来说都不起作用。
我正在尝试配置 apache2 以通过 keytab 在 AD2012 服务器上使用 Kerberos 进行身份验证。
首先,我激活了 AD 中所有可以激活的加密msDS-EncryptedSupportedTypes
这是我的客户端(debian)krb5.conf
:
[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
default_realm = REALM.LOCAL
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
# for testing purpose only
allow_weak_crypto = true
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
[realms]
REALM.LOCAL = {
kdc = kdc.realm.local
admin_server = kdc.realm.local
default_domain = realm.local
}
[domain_realm]
.realm.local = REALM.local
realm.local = REALM.LOCAL
这是我使用的密钥表:
klist -kte /etc/apache2/http.keytab
Keytab name: FILE:/etc/apache2/http.keytab
KVNO Timestamp Principal
---- ------------------- -------------------------------------------------------------
14 01/01/1970 01:00:00 HTTP/[email protected] (des-cbc-crc)
14 01/01/1970 01:00:00 HTTP/[email protected] (des-cbc-md5)
14 01/01/1970 01:00:00 HTTP/[email protected] (arcfour-hmac)
14 01/01/1970 01:00:00 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
14 01/01/1970 01:00:00 HTTP/[email protected] (aes128-cts-hmac-sha1-96)
如果我使用 keytab 通过 KDC 进行身份验证,一切正常:
kinit -Vkt /etc/apache2/http.keytab HTTP/server.realm.local
Authenticated to kerberos v5
列表-e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP/[email protected]
Valid starting
06/04/2017 20:32:09 07/04/2017 06:32:09 krbtgt/[email protected]
renew until 07/04/2017 20:32:08, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
我现在配置一个.htaccess
来测试身份验证,如下所示:
AuthType Kerberos
AuthName "Kerberos Login"
KrbAuthRealm REALM.LOCAL
Krb5KeyTab /etc/apache2/http.keytab
KrbServiceName HTTP/server.realm.local
Require valid-user
当我尝试进行身份验证时添加日志中的内容:
[调试] src/mod_auth_kerb.c(1939): [客户端 192.168.4.16] kerb_authenticate_user 使用用户 (NULL) 和 auth_type Kerberos 输入
[debug] src/mod_auth_kerb.c(1691): [客户端 192.168.4.16] 使用 KRB5 GSS-API 验证客户端数据
[debug] src/mod_auth_kerb.c(1707): [客户端 192.168.4.16] 客户端没有将其凭证委托给我们
[debug] src/mod_auth_kerb.c(1735): [client 192.168.4.16] 警告:收到的令牌似乎是 NTLM,Kerberos 模块不支持它。请检查您的 IE 配置。
[调试] src/mod_auth_kerb.c(1138): [客户端 192.168.4.16] GSS-API major_status:00010000,minor_status:00000000
[错误] [客户端 192.168.4.16] gss_accept_sec_context() 失败:请求了不受支持的机制(,未知错误)
网络跟踪显示TGS_REQ
主体采用 AES256 加密,TGT 也采用 加密PA-DATA
。但我收到了KRB5KDC_ERR_ETYPE_NOSUPP
回复。
如果我手动验证该服务,我会得到以下信息:
kinit 用户名
韓文 HTTP/[电子邮件保护]
列表-e
Valid starting
06/04/2017 20:32:09 07/04/2017 06:32:09 krbtgt/[email protected]
renew until 07/04/2017 20:32:08, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
06/04/2017 20:35:00 07/04/2017 06:32:09 HTTP/[email protected]
renew until 07/04/2017 20:32:08, Etype (skey, tkt): des-cbc-crc, des-cbc-md5
我不知道 DES 加密来自哪里。
对于可能出现的问题,您有什么见解吗?我该如何进一步调查?
更新:我现在怀疑是支持 DES 的 AD 服务帐户。据我所知,它可能会禁用任何其他密码算法。我无法访问 AD,因此现在无法测试。
答案1
这确实是由于 AD 中激活了 DES 支持。这实际上会覆盖任何其他密码算法。
因此,在服务帐户上禁用它使得协商在 AES256 中有效。