问题标签 [gssapi]
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.
gssapi - 将 GSSCredential 导出到字节数组,反之亦然
我在 java 中使用 GSS 实现 S4U 协议。由于 java 7 不支持此协议,我计划在 C 中的 gss api 方法上编写一个 JNI 包装器,这些方法在 java 中没有等效项。
作为其中的一部分,我正在gss_acquire_cred_impersonate_name上编写 JNI,如 http://k5wiki.kerberos.org/wiki/Projects/Services4User#gss_acquire_cred_impersonate_name中所述。
此方法采用先前填充的输入凭据句柄 (gss_cred_id_t) 并填充输出凭据句柄。在我的 java 代码中,我创建了一个 GSSCredential,我需要以 gss_cred_id_t 的形式将其传递给 C 函数,并将输出凭据句柄从 gss_cred_id_t 转换回 GSSCredential 以供进一步使用。
如何将 GSSCredential 对象导出到字节数组,反之亦然,以便与 C 函数通信?
谢谢
ldap - Protocol problems: LDAP and GSSAPI authentication
I'm currently trying to implement GSSAPI support in a third-party LDAP library (the Common Lisp library trivial-ldap). I got it to work when authenticating to an AD server (using the mechanism GSS-SPNEGO
) but when trying to talk to an OpenLDAP server I get an error reply from the server saying that the mechanism is not supported.
It turns out that OpenLDSP doesn't support GSS-SPNEGO
, but instead wants GSSAPI
. The protocol used to do GSSAPI authentication seems very different from GSS-SPNEGO, but my problem is that I can't figure out is what way.
Is there anyone that could assist in explaining how the GSS packets are supposed to be wrapped inside the SASL messages when using the mechanism GSSAPI
?
I tried simply sending packets in the same form as GSS-SPNEGO
, but when I do so the SASL handshake never ends. After the context has been created, I keep getting result code 14 (LDAP_SASL_BIND_IN_PROGRESS) as a response to anything I send.
kerberos - 升级到 JRE 6 update 45 后,kerberos 身份验证失败
我们使用 kerberos 身份验证来执行 SSO。早些时候,我们的产品在 JRE 6 Update 22 上运行,一切正常。我们最近迁移到 JRE 6 update 45,kerberos 身份验证失败。
因此,基本上代码执行 2 个步骤 - 连接和登录 1. “连接”步骤测试 SPN 名称和凭据(密码或密钥表)是否可以登录到由领域和 KDC 信息标识的域控制器。2. “登录”步骤也是如此,然后也尝试使用 GSSAPI 身份验证机制绑定到 AD LDAP 服务。因此,它正在尝试执行 GSSAPI 绑定,但在这一步它现在失败了。
所以,这就是正在发生的事情——
现在,这里的问题是,当服务器发送 TGS-REQ 时,它使用服务器名称(未知)发送:ldap/10.213.177.3 而在旧 JRE 版本中,它曾经将 TGS-REQ 发送为 ldap/win2008.mcssoiwa .hari(hostname of kdc) 即使给出了 KDC IP。现在,KDC 没有使用 ldap 和 IP 注册的 SPN,但它有一个使用 KDC 的 Ldap/主机名注册的 SPN
如果我们为 ldap/ 显式执行 setspn 命令,一切都会开始工作。因此,导致此问题的 JRE 6 的更高版本中发生了什么变化。这对我们来说确实是一个障碍,我们不知道如何解决这个问题。任何帮助/指导将不胜感激。
这样做的代码 -
这会引发以下异常
*
java - LDAP 在使用 GSSAPI 的 Java 中的子领域/跨领域设置中创建 InitialLdapContext 失败
我有一个服务器进程在机器 KERBOS.COM 上运行,它试图连接到 IN.KERBOS.COM(Sub Realm) 中的 LDAP 服务器以使用 GSSAPI 机制同步用户。
通过查看 GSSLOGS,我们可以看到
它尝试进行身份验证的 spn 属于 KERBOS.COM ldap/invr28ppqa36.in.kerbos.com@KERBOS.COM 这是让它选择 IN.KERBOS.COM 作为领域的任何方式。
默认领域必须是 krb5.conf 中的 KERBOS.COM。因此,将默认领域更改为 IN.KERBOS.COM 不是一种选择。
我还给了它完全限定的名称,所以应该有某种方法告诉它使用 IN.KERBOS.COM 作为领域。
日志
authentication - 使用 GSSAPI 来自 Kerberos 的票证的 LDAP 绑定问题
我一直在尝试使用 Kerberos 服务器提供的票证制作一个需要使用 GSSAPI 绑定到 LDAP 服务器的应用程序。为此,我正在使用 Novell 的 JLDAP 库。
我能够从身份验证服务器获取票证,但是当我尝试绑定到服务服务器(在我的情况下为 LDAP)时,我得到 GSSException: Major Status: (589824, Invalid token is provided), Minor Status: (0,未知错误) 并且绑定失败。
AS(身份验证服务器)和 SS(服务服务器(LDAP 服务器))都位于单个代理之后。在这种情况下,他们是否需要相互认证?
我不确定,但似乎我的 java 代码无法获取/识别/解密从 AS(身份验证服务器)收到的令牌。我在Novell 的 LDAPConnection.java 的 SASL 绑定方法中提供机制名称为“ GSSAPI ”
有人遇到过这种麻烦吗?造成这种情况的原因和可能的解决方案是什么?请解释。
kerberos - IBM Jdk 问题 Kerberos:无法在 JAAS 中使用 credsType=both 验证 keytab
我有一个服务到服务模型,其中我有一个用于 Kerberos 身份验证的密钥表。
在这个模型中,我定义了一个登录配置如下:-
此登录配置可替代 jaas.conf
现在我正在尝试使用 LoginContext 的登录方法。然后我从中获得主题。
现在使用这个主题我做了一个特权动作。
这失败了。相关日志(我在设置日志系统属性后挖掘出来的):-
现在真正令人困惑的是:-
第一部分是针对 createCredential 本身的。然而,第二个似乎是一些机制工厂相关的调用(在这种情况下是 kerberos)。现在,在这个基于文件的 cred 缓存身份验证开始之后。
0010: 43 4f 4d 通信
这意味着机制工厂以某种方式获得了错误的值。
我尝试反编译 IBM jar(ibmjgssprovider.jar),但里面的类名似乎是乱码(替换为 a、b、xy 等)。
这最终导致:- java.io.IOException: Primary principals do not match
作为专有的,我很难弄清楚 IBM 的行为。OpenJdk 的帮助很大。
有人可以帮忙吗。我的产品设置的某些系统属性是否会导致这种行为?
我正在尝试在执行时检查所有可能的系统属性。请让我知道是否需要其他东西。
也有人可以指出一些 IBM JDK 安全论坛吗?我也想在那里发布这个问题。
kerberos - 带有 Kerberos 的 SPN 如何工作
据我了解,
- SPN 是 Windows 服务的身份验证工具。
- Kerberos 是一种用户身份验证服务
- SPNEGO-GSSAPI 是能够使用这些服务的第三方 API。
- SSPI :是从 SPNEGO 向 SPN 服务发送请求的中立层。
我完全迷路了吗?
试图弄清楚它是如何工作的,但信息要么太精确,要么不够。
c - GSSAPI:gss_export_name 返回空白
我在使用 gss_export_name 导出名称时遇到问题,虽然一旦名称被导出,我应该能够打印它,但我打开了一个空白字面导出名称:,导出名称长度:47
这是我的代码
为了清楚起见,我决定不包括检查,但我也注意确保 major_status 始终 == GSS_S_COMPLETE 感谢任何想法
c++ - c/c++客户端服务器跨平台程序中如何使用gssapi kerberos?
在过去的几年里,我不得不“偶尔”与 Heimdal / MIT Gssapi 合作进行 kerberos 身份验证。我必须构建一个应用程序,用作在 Linux 机器上运行的 Web 服务,并为在 Windows 和/或 Linux 桌面和工作站上运行的浏览器等客户端应用程序提供服务。肯定不是最容易驯服的野兽。最终在总结我的工作时,我可以记录下由于多维度的挑战而产生的困难。开始使用 gssapi 编程确实是一个挑战,因为文档很差,而且几乎不存在教程。谷歌搜索主要导致一些关于什么是 kerberos 的理论讨论,或者导致编写的内容假定您已经知道除了一些特定的语义问题之外的所有内容。
以前没有真正做过这样的 wiki,而且我肯定不是 GSSAPI 和 Kerberos 的权威,所以请善待,但除此之外,请贡献并纠正我的错误。网站编辑,我指望你做你的魔法;)
成功完成项目需要正确完成 3 件具体的事情:
- 测试环境的设置
- 设置库
- 你的代码
正如我已经说过的,这样的项目是野兽,只是因为这三个项目都没有放在任何地方的同一页面上。
好的,让我们从头开始。
新手 GSSAPI 不可避免的理论可帮助客户端应用程序为服务器提供凭据以权威地识别用户。非常有用,因为服务器应用程序可以根据用户的需要调整其提供的响应。因此,很自然地,客户端和服务器应用程序都必须进行 kerberized,或者正如某些人所说的 kerberos 感知的。
基于 kerberos 的身份验证要求客户端和服务器应用程序都是 Kerberos 领域的成员。KDC(Kerberos 域控制器)是管理领域的指定机构。Microsoft 的 AD 服务器是最常见的 KDC 示例之一,尽管您当然可以使用基于 *NIX 的 KDC。但可以肯定的是,如果没有 KDC,就根本没有 Kerberos 业务。加入域的台式机、服务器和工作站相互识别,只要它们都保持加入域。
对于您的初始实验,请在同一领域中设置客户端和服务器应用程序。尽管通过在这些领域的 KDC 之间创建信任,或者甚至合并来自互不信任的不同 KDC 的密钥表,Kerberos 身份验证当然也可以跨领域使用。您的代码实际上不需要任何更改来适应这种不同且听起来很复杂的场景。
Kerberos 身份验证基本上是通过“票证(或令牌)”工作的。当成员加入领域时,KDC 将“授予令牌”给他们每个人。这些令牌是独一无二的;时间和 FQDN 是这些票证的重要因素。
在您考虑代码的第一行之前,请确保您已正确完成以下两项:
陷阱#1设置开发和测试环境时,请确保所有内容都经过测试并作为 FQDN 处理。例如,如果您想检查连接,请使用 FQDN,而不是 IP 进行 ping。因此不用说,它们必须具有相同的 DNS 服务配置。
陷阱#2确保所有运行 KDC、客户端软件、服务器软件的主机系统具有相同的时间服务器。时间同步是一个人忘记的东西,在经历了很多头发分裂和头部撞击之后才意识到不对劲!
客户端和服务器应用程序都需要 kerberos 密钥表。因此,如果您的应用程序要在 *NIX 主机中运行,并且是 Microsoft 域的一部分,那么在我们开始查看 gss 编程的剩余准备步骤之前,您必须生成一个 kerberos 密钥表。
Kerberos 5 (krb5 1.0) 互操作性分步指南绝对是必读的。
GSS-API Programming Guide是一本极好的书签。
根据您的 *NIX 发行版,您可以安装用于构建代码的头文件和库。但是,我的建议是下载源代码并自己构建。是的,你可能不会一下子把它弄好,但这肯定是值得的。
陷阱#3确保您的应用程序在 Kerberos 感知环境中运行。我真的很难学会这一点,但也许是因为我不那么聪明。在我最初的 gssapi 编程斗争阶段,我发现 kerberos 密钥表对于让我的应用程序支持 kerberos 是绝对必要的。但我根本找不到任何关于如何在我的应用程序中加载这些密钥表的信息。你知道为什么?!!因为没有这样的api存在!!!因为:应用程序将在知道 keytab 的环境中运行。好的,让我简化一下:在将环境变量设置KRB5_KTNAME
为存储密钥表的路径后,必须运行应该执行 GSSAPI / Kerberos 的应用程序。所以要么你做这样的事情:
或者在使用 gssapi 的代码的第一行运行之前充分利用在您的应用程序中setenv
进行设置。KRB5_KTNAME
我们现在准备在应用程序的代码中做必要的事情。
我知道应用程序开发人员必须审查许多其他方面,才能编写和测试应用程序。我知道一些环境变量,这可能很重要。
任何人都可以进一步阐明这一点吗?
java - 爱尔兰 fada 字符在 java 中的 gss 名称已损坏
windows-xp 将授权标头中的 SPNEGO 令牌发送到我们理解 kerberos 协议的服务器。服务端应用使用java提供的gss-api实现。
我们的代码从 spnego 令牌中提取 upn 名称,并使用 LDAP 存储对其进行验证。如果 upn 名称包含唯一的 ascii 字符(小于 127),那么一切正常。
但是,如果用户名包含非 ascii 字符(例如 irish fada),则 java gss-api 出于某种原因将它们解释为垃圾字符。
我想知道 Java7 GSS 名称是否可以包含非 ascii 字符?