首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自TGS-REP的KDC验证

来自TGS-REP的KDC验证
EN

Stack Overflow用户
提问于 2020-08-24 04:33:03
回答 2查看 154关注 0票数 0

我有一个关于从TGS-REP验证KDC的问题。

我有一个用c++编写的遗留测试工具,用于验证用户的AD凭据。这个测试工具调用krb5库方法来执行身份验证,并在客户端(linux机器)上运行。我可以在数据包捕获中看到,测试工具正在验证来自AS-REP的用户。

客户端上的测试工具<-> AD服务器

<-AS-REP

(现在将验证用户)

测试工具正在验证AS-REP中的用户。

它不是发送/接收TGS-REQ/TGS-REP。*我从TGS-REP中了解到,我们也可以验证KDC。*所以我扩展了这个工具来做下面的事情:

客户端上的测试工具<-> AD服务器

代码语言:javascript
复制
 -———----——— 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得到这个验证?

EN

回答 2

Stack Overflow用户

发布于 2020-08-24 19:53:59

我真的不明白你所说的验证KDC是什么意思。通常会验证传入的kerberos票证。在验证传入令牌时,不需要往返于KDC。

传入的kerberos令牌使用SPN的密码(密钥)进行加密。用于解密令牌的密钥仅存在于密钥表中。

检查此link以了解它是如何完成的。

此外,有两个主要部分需要考虑-接受者和发起者。

验证令牌的服务可以是

  • Acceptor -使用configuration
  • Initiator中提供的密钥表或用户名/密码接受并验证票证-应用程序可以为自己/其他service
  • Acceptor +启动器KDC请求令牌-在此,您可以验证传入的令牌,并根据该令牌向impersonation.

请求新令牌-这是委派和impersonation.等情况

我使用的Kerberos风格有一个配置,使应用程序成为启动器或接受者。基于此,GSS-API决定是否与KDC通信。

票数 0
EN

Stack Overflow用户

发布于 2020-09-01 21:08:40

好的,这是我为达到我的需求所做的。

代码语言:javascript
复制
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...

这对我来说是有效的,但我在这里面临两个问题。

每次执行时,

  1. My测试工具都会失败,并显示"error: Cannot contact any KDC for realm 'MY.DOMAIN.COM'“。它交替地通过测试。我已经验证了我的krb5.conf,并且它具有realm所需的条目。

  1. 当测试成功时(解码tkt、读取密钥表、解密srvc tkt时没有krb5错误),我在域控制器上捕获的数据包跟踪中看不到TGS-REQ/TGS-REP。但与此同时,我的linux机器上有"TGS-REQ“UDP包,测试工具就是在这个机器上运行的。

出现上述观察结果的原因是什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63551737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档