我有一个关于从TGS-REP验证KDC的问题。
我有一个用c++编写的遗留测试工具,用于验证用户的AD凭据。这个测试工具调用krb5库方法来执行身份验证,并在客户端(linux机器)上运行。我可以在数据包捕获中看到,测试工具正在验证来自AS-REP的用户。
客户端上的测试工具<-> AD服务器
<-AS-REP
(现在将验证用户)
测试工具正在验证AS-REP中的用户。
它不是发送/接收TGS-REQ/TGS-REP。*我从TGS-REP中了解到,我们也可以验证KDC。*所以我扩展了这个工具来做下面的事情:
客户端上的测试工具<-> AD服务器
-———----——— AS-REQ—————>
<----——— AS-REP —————
—————— TGS-REQ (with sname: host/test.machine.examaple.com@EXAMPLE.COM)—————>
<——— TGS-REP—————.我的test-toold将通过将KDC的密钥与预先配置的keytab进行比较来验证KDC。我已经为上面的SPN创建了一个keytab。
问:从一些在线阅读中,我可以读到这可以通过比较KDC的密钥和预先配置的密钥表文件来完成。我确信我没有完全理解这一点。请帮我理解一下这部分。为什么我们不能从AS-REP得到这个验证?
发布于 2020-08-24 19:53:59
我真的不明白你所说的验证KDC是什么意思。通常会验证传入的kerberos票证。在验证传入令牌时,不需要往返于KDC。
传入的kerberos令牌使用SPN的密码(密钥)进行加密。用于解密令牌的密钥仅存在于密钥表中。
检查此link以了解它是如何完成的。
此外,有两个主要部分需要考虑-接受者和发起者。
验证令牌的服务可以是
请求新令牌-这是委派和impersonation.等情况
我使用的Kerberos风格有一个配置,使应用程序成为启动器或接受者。基于此,GSS-API决定是否与KDC通信。
发布于 2020-09-01 21:08:40
好的,这是我为达到我的需求所做的。
krb5_context krb5Context;
krb5_init_context(&krb5Context);
…
// get initial tkts (AS-REQ/AS-REP) for user userone@my.domain.com
krb5_get_init_creds_password(krb5Context,... )
…
// store the tkt in cache
krb5_cc_default()
krb5_cc_initialize()
krb5_cc_store_cred()
…
krb5_creds in_creds, out_creds;
memset(&in_creds, 0, sizeof(in_creds));
err = krb5_parse_name(krb5ctx, user, &user_princ); // user = “userone@my.domain.com”
err = krb5_parse_name(krb5ctx, spn, &server_princ); // spn = “HOST/test-host.my.domain.com@MY.DOMAIN.COM”
in_creds.client = user_princ;
in_creds.server = server_princ;
…
// send TGS-REQ if srv tkt not there in cache,
// receive a session tkt for above srvc in TGS-REP
krb5_get_credentials()
// decrypt the srvc tkt using the key in keytab file
krb5_decode_ticket()
krb5_kt_default()
krb5_kt_get_entry()
krb5_decrypt_tkt_part()
...
krb5_free...这对我来说是有效的,但我在这里面临两个问题。
每次执行时,
出现上述观察结果的原因是什么?
https://stackoverflow.com/questions/63551737
复制相似问题