问题标签 [kerberos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2537 浏览

c# - 在没有 SetSPN 的 Windows 域上查询/更改 SPN

有人在 Windows 域上查询/更改 SPN 有什么运气吗?Google 上的大多数点击都与 SQL 相关:我自己找不到任何有关如何执行此操作的信息。最重要的事情是查询 SPN 配置并检查重复项。

根据 Arnout,我编写了以下代码:

0 投票
1 回答
634 浏览

perl - 如何使用 Perl 编辑 Kerberos 5 配置文件?

有没有人遇到过会解析(和编写)kerberos 配置文件(即/etc/krb5.conf)的 Perl 模块?我看过很多解析模块,如Config::GeneralConfig::Auto等,但似乎没有一个能够处理如下嵌套结构:

它还需要处理INI-style 部分,例如:

有关格式的更多详细信息,请参阅 krb5 conf 文档

我正在编写自己的解析器,但如果其他人已经编写了一个漂亮、优雅的模块,我宁愿不必这样做。

0 投票
1 回答
572 浏览

process - 客户端和服务器之间必须发生的过程,Kerberos 身份验证

我试图学习和理解 Kerberos,我需要了解客户端和服务器之间必须发生的过程——Windows 和非 Windows 平台——以启用 Kerberos 身份验证。寻找一些帮助来更好地解释这个过程。谢谢你

0 投票
1 回答
4866 浏览

java - 服务主体名称 (SPN) 是否绑定到特定机器?

目前,我的 GSS 演示应用程序(在服务器端)收到 KrbException:解密字段的完整性检查失败(31)。现在我正在寻找这个的原因。我怀疑,它来自于这样一个事实

  1. 客户端和服务器应用程序在同一台机器 (localhost) 上运行和/或
  2. SPN 是为另一台机器(计算机)生成的

第二个表示服务主体是为机器 xxx0815.domain.net 生成的,所以 SPN 是 HTTP/xxx0815.domain.net@DOMAIN.NET。而且我的机器不是那个,但是我已经拿到了keytab文件,这样服务器的登录方法就成功了。

我怀疑正确还是我犯了另一个错误?

服务器配置及源码:
server.conf

GSSServer.java(省略了样板文件)

客户端配置及源码:
client.conf

GssClient.java(样板省略)

我检查了传出和传入的网络数据 - 两边都是一样的,所以我可以排除那里的问题(我对输出进行了 BASE64 编码,然后通过流发送它。我认为没有什么可以去的那里错了...)。

我得到的例外:

0 投票
3 回答
9829 浏览

kerberos - 我可以向客户端表明支持 SPNEGO 但 NTLM 不适用于 HTTP 请求吗?

我目前知道的微软使用的两个 WWW-Authenticate 添加是

  • NTLM
  • 谈判

如果从服务器发送 Negotiate,将根据一组条件使用 Kerberos

  • 内网区
  • 使用主机名而不是 IP 访问服务器
  • 已启用 IE 中的集成 Windows 身份验证,主机在 Firefox 中受信任
  • 服务器不是浏览器本地的
  • 客户端的 Kerberos 系统通过域控制器的身份验证

然后将在服务器和客户端之间尝试 Kerberos,如果不满足上述条件,则将尝试 NTLM。

我的问题是,服务器是否有某种方法可以指示不应发送 NTLM?我目前通过跟踪会话中的请求来处理这个问题,如果收到 NTLM 消息,它会在会话的剩余时间内禁用 Kerberos 和 WWW-Authenticate。

0 投票
3 回答
5055 浏览

windows - 将 Kerberos 与 DCOM 一起使用时是否需要 SPN?

我正在使用 DCOM 在 Windows 网络上提供各种应用程序服务,使用 Kerberos 来处理身份验证。系统通常工作正常,但我遇到了从单独的(受信任的)域访问服务的问题。特别是,服务无法回调客户端应用程序,收到错误“发生安全包特定错误”。此外,如果我调整服务以明确要求 Kerberos 身份验证(而不是使用 SNEGO/negotiate),客户端甚至无法调用服务器(再次收到“发生安全包特定错误”)。

令人困惑的是,事情已经运行多年没有问题。但是,与我们之前所做的相比,这里有一些不同之处。一方面,所涉及的服务器运行的是我以前没有使用过的 Windows 2008。此外,如上所述,仅当从单独域的帐户访问服务时才会发生错误,并且以前的使用从未尝试过此操作。

现在问题是:我没有为此 DCOM 服务使用 SPN(服务主体名称),但一些错误和事件日志让我认为这可能是问题所在。但是,我发现的所有文档都不清楚这是否正确,或者如果我确实需要它,我将如何设置 SPN。有人确定 SPN 是否是我在这里缺少的吗?如果是这样,你能指出我应该如何做吗?

额外细节:

对于服务器设置为强制 Kerberos 身份验证的场景,打开Extended RPC Debugging会提供一些额外的线索。客户端可以使用 CoCreateInstanceEx 成功连接,但服务接口上的调用会失败,如上所述。RPC 错误记录在位置 140 处显示错误,错误代码为 0x80090303(“指定的目标未知或无法访问”),该记录的第三个参数是空字符串。这表明缺少 SPN 是罪魁祸首。

0 投票
1 回答
28373 浏览

python - 使用 python 进行 Kerberos 身份验证

我需要在 python 中编写一个脚本来检查受 kerberos 保护的网页。有没有可能从 python 中做到这一点以及如何做到这一点?该脚本将部署在安装了 python 2.4.something 的 linux 环境中。

德托尼

0 投票
2 回答
7509 浏览

authentication - 如何离线使用 LDAP 凭据?

我想使用 LDAP 服务器(可能是Apache 目录)来管理应用程序的登录名和凭据。有时,应用程序需要离线工作(在笔记本电脑上),而无需连接到 LDAP 服务器。

在本地复制凭据的最佳方法是什么?

我已经想过:

  • 使用Mitosis在笔记本电脑上复制 LDAP 服务器。

    但这将是一个相当“沉重”和复杂的解决方案。而且有丝分裂似乎还没有完成。

  • 将凭据导出为可以存储在笔记本电脑上的 LDIF 文件。

    但我需要一种方法来检查 LDIF 文件是否真的来自 LDAP 服务器(该文件应该包含一种签名)。此外,我想拒绝超过一周未更新的 LDIF 文件。如果我可以避免自己实施签名和年龄检查,那就太好了。

还有其他可以帮助我的想法或工具吗?

编辑编辑:我查看了 Kerberos,因为Java-Kerberos-API 的文档似乎说可以在本地缓存中使用缓存票证,我认为这可能是我的解决方案。此外,Kerberos 可以作为插件添加到 Apache Directory。但是 Kerberos 缓存存储解密的票据(旨在与其他应用程序共享它们)。我需要票证的加密版本才能在离线会话期间检查用户密码。结论:Kerberos 没有为我的问题提供简单的解决方案。

0 投票
3 回答
10767 浏览

java - 使用 Kerberos 身份验证从 Java 应用程序访问 SharePoint 网站

我正在尝试从 Java 应用程序访问SharePoint网站。SharePoint 服务器首选 Kerberos 身份验证。您能否提供一个仅实现 Kerberos 身份验证的示例?

0 投票
1 回答
1872 浏览

java - 使用现有的 KerberosTicket 绑定到 Ldap 并搜索用户属性

给定已转发到我的代码的现有 javax.security.auth.kerberos.KerberosTicket,Java 中有没有办法查询 Active Directory 中的用户属性?我知道我想使用 Ldap 进行搜索,但我对如何使用此 KerberosTicket 对象绑定到 ldap 感到困惑。目前我正在使用 Spring-Ldap 和 Spring-Security 与 Active Directory 通信并使用简单的身份验证凭据我可以绑定用户名和密码来验证我的用户并检索我的所有属性、角色等。但是在我通过的情况下来自该 Active Directory 服务器的 KerberosTicket 我现在知道如何绑定自己,因为我不知道该用户的密码。我目前没有从 LoginContext 调用 login() 来获取我的 KerberosTicket,它已作为加密的 java 对象转发到我的代码。