为什么可以使用setspn创建无效的服务主体名称(SPN)

时间:2017-06-21 18:31:36

标签: kerberos spn

今天,我能够使用setspn命令创建完全随机且无效的SPN,但我不明白为什么允许使用无效的SPN。例如:

setspn -s RandomSvc/randomname.random.random valid_user已在我的域中成功运行valid_user(我在此处替换实际用户名,但用户是域中的有效用户)。

然后,如果我setspn -l valid_user,它将列出此无效条目。

我想没有人可以实际连接到这项服务,因为它不存在。但是,如果我尝试添加有效的SPN,但是错误地输入了它,在我的应用程序给出错误之前我不会注意到它。那么为什么setspn不进行任何验证(除了用-s检查重复)?

1 个答案:

答案 0 :(得分:1)

setspn命令不会阻止你创建无效的SPN,并且有充分的理由,所以这里没有实际问题。您对有效SPN的定义 - 在DNS上具有主机名且可通过TCP / IP访问的实际机器上运行的实际服务的表示形式 - 由于我将要描述的原因而不会被setspn强制执行。根据KDC,虽然SPN 代表在实际机器上运行的实际服务,该实际机器在DNS中具有可通过TCP / IP到达的主机名,但实际上并不一定是真实的。时间虽然。这就是原因。您是否考虑过以后可能会安装服务,甚至运行它的机器?当您创建SPN时,服务甚至是它运行的机器以及所述机器的DNS条目都不必在此处和现在就位。 Setspn.exe只是一个基本工具,它允许您创建符合RFC的Kerberos的SPN。由你来决定它的正确性,它不会让任何人抓住这个过程。我为一家大公司工作,并一直为服务创建SPN,甚至为尚不存在的机器创建SPN。这样开发人员或系统管理员就不必与我联系以在事后创建SPN。他们遵循一个项目计划,精明的管理人员将拥有SPN,DNS entires,机器的IP地址,所有计划出来并提前创建,然后操作系统管理员才能实际启动实时服务器以供此类使用。因此,如果setspn阻止人们为尚未启动和运行的服务创建SPN,那么会有一些非常生气的系统管理员。这就是为什么当你认为它不应该被允许创建“无效”SPN的原因。如果你想要通用setspn.exe提供额外的验证层,为了在应用程序之前捕获错误,那么你必须自己创建这样的东西。不过要问自己,这是否值得花时间去做一些如此具体的事情?我的意思是,你多久创建一次SPN?这对你来说应该都有意义。我定期运行一个setspn -X来捕获重复的罪我的域名。我从来没有时间,但我想我也可以列出域中所有当前的SPN,并检查它们是否各自当前有效,如果不是,则采取纠正措施。我敢肯定,可能不止一些不再活跃。我认为这不是什么大不了的事。