2017-06-21 77 views
1

今天,我能够使用setspn命令创建完全随机和无效的SPN,但我不明白为什么允许无效的SPN。例如:为什么可以使用setspn创建无效的服务主体名称(SPN)

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

然后,如果我做setspn -l valid_user,它会列出这个无效的条目。

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

回答

1

setspn命令不会阻止你创建一个无效的SPN,并且有很好的理由,所以在这里没有实际的问题相信与否。由于我将要描述的原因,您将无法通过setspn强制执行有效SPN的定义 - 即在具有可通过TCP/IP访问的DNS中的主机名的实际计算机上运行的实际服务的表示。根据KDC,虽然SPN 代表实际的服务运行在DNS中具有可通过TCP/IP访问的主机名的实际机器上,但它实际上并不一定是真实的。这是为什么。你是否考虑过这种情况:服务,甚至是将要运行的机器,都将在以后安装?在创建SPN时,服务甚至是它所运行的机器以及所述机器的DNS条目都不必在现在就位。 Setspn.exe是一个简单的工具,它允许您创建符合RFC的Kerberos的SPN。它取决于你的建筑设计,但它不会阻碍任何人参与这个过程。我为一家大公司工作,并始终为服务创建SPN,甚至为尚不存在的机器创建SPN。这样开发人员或系统管理员不需要联系我就可以在事后创建SPN。他们正在遵循项目计划,精明的管理人员将拥有SPN,DNS实例,机器的IP地址,所有计划出来的和提前创建的操作系统管理员都可以在实际运行的服务器上启用此功能。因此,如果setspn阻止人们为尚未启动并正在运行的服务创建SPN,那么会出现一些非常愤怒的系统管理员。这就是为什么它被允许创建“无效”的SPN,当你认为它不应该。如果你想要做一些额外的验证,而不是通用setspn.exe提供的验证,在你的应用程序执行之前发现错误,那么你将不得不自己创建一个这样的事情。问问自己虽然,这是值得的东西如此具体的时间?我的意思是,你多久创建一次SPN?这对你现在应该都是有意义的。我定期运行一个setspn -X来捕捉我的域名重复的罪行。我从来没有过这个时间,但我想我也可以列出域中所有当前的SPN,并检查它们是否都是当前有效的,并且如果它们不是,则采取纠正措施。我相信可能有不止一些是不活跃的。我认为这不是什么大问题。

+1

这一切似乎对我来说都是正确的。不知道OP为什么没有把它标记为现在的答案... –

相关问题