【问题标题】:Why an invalid service principal name (SPN) can be created using setspn为什么可以使用 setspn 创建无效的服务主体名称 (SPN)
【发布时间】:2017-11-24 19:20:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: kerberos spn


    【解决方案1】:

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

    【讨论】:

    • 这一切对我来说似乎都是正确的。不知道为什么 OP 现在还没有将此标记为答案...
    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多