为何在Active Directory中无匹配servicePrincipalName属性的对象时仍能获取服务票据?
为何在Active Directory中无匹配servicePrincipalName属性的对象时仍能获取服务票据?
这个问题其实是Kerberos和AD里一个容易被忽略的默认行为——主机SPN回退匹配机制在起作用,我来给你拆解清楚:
- 当你通过
kvno HTTP/somehost.example.com@EXAMPLE.COM请求服务票据时,域控制器(也就是Kerberos KDC)会先按常规逻辑查找有没有显式注册了HTTP/somehost.example.com这个SPN的AD对象。 - 当它找不到这个显式SPN时,会触发一个默认的回退规则:检查目标主机的计算机对象是否存在
HOST/somehost.example.com或HOST/somehost这类SPN。 HOST是AD计算机对象自带的通用SPN,它的作用就是代表该主机上运行的所有服务。KDC会默认认为,只要主机本身有HOST类SPN,那么该主机上的任意服务(包括HTTP)都可以复用这个SPN来获取Kerberos票据,不需要单独注册对应服务的SPN。
结合你的实际情况来看:
- 你能拿到kvno返回的票据,正是因为KDC匹配到了
somehost计算机对象上的HOST/somehost.example.com或HOST/somehostSPN,通过回退机制认可了HTTP服务的票据请求。 - 而
setspn -Q HTTP/somehost.example.com和LDAP搜索找不到对应SPN完全正常,因为这个HTTP的SPN根本没有被显式注册到任何AD对象里,它是通过KDC的隐式规则被“虚拟”认可的。
如果想验证这个机制,你可以在测试环境里尝试移除该计算机对象的HOST类SPN,再执行kvno命令,这时应该就无法获取到HTTP服务的票据了。
备注:内容来源于stack exchange,提问作者Sam Morris
相关产品推荐
相关产品推荐

