首页 > 解决方案 > 为什么kerberos需要计算机时钟同步?

问题描述

客户端节点时钟故意设置为 kdc 前 10 小时

然后从客户端节点运行kinitklist

kinit 不报错,klist 可以看到 Ticket 缓存

~date -s 19:20:38

~kinit -kt  /etc/kuduclient.keytab kuduclient@INFO2.COM

~klist
Ticket cache: KEYRING:persistent:0:0
Default principal: kuduclient@INFO2.COM

Valid starting       Expires              Service principal
11/11/2020 09:49:23  11/12/2020 09:11:00  krbtgt/INFO2.COM@INFO2.COM
    renew until 11/18/2020 09:11:00

标签: securityldapkerberos

解决方案


Kerberos 中的时间是相对的。首先,它应该基于 UTC 时区。如果 10 小时的差异只是与时区有关,那么 Kerberos 堆栈会很高兴地转换为 UTC,一切都很好。

其次,许多(大多数?)Kerberos 堆栈并不关心确切的时间,他们关心的是相对于 KDC 认为的时间。我的意思是,客户端可以向 KDC 发出请求,如果时间过长,KDC 将返回一个错误,包括认为的当前时间。客户端可以自由地重新发送请求,并将时间延长到 KDC 的窗口内。这仍然保证了安全的正确性,因为从权威机构——KDC 的角度来看,时间限制仍然得到满足。


推荐阅读